Подтвердить что ты не робот

Являются ли массивы на С++ такими же, как C?

Компилятор С++ обрабатывает массивы так же, как в C?

например

В C,

  • Доступ к массиву с использованием индекса оператор всегда интерпретируется как указатель.
  • В аргументе функции объявления массива рассматриваются как указатель на начало элемента.
4b9b3361

Ответ 1

Да и нет. Массивы работают одинаково на обоих языках по большей части (C99 поддерживает массивы переменной длины, а С++ - нет, а также может быть несколько других тонких различий).

Однако то, что вы говорите, не совсем верно. Компилятор не рассматривает доступ к массиву как указатель, даже не в C. Доступ к массиву может быть более эффективным в некоторых случаях, поскольку компилятор имеет лучшую информацию о сглаживании, доступную в случае массива. В C и С++ доступ к простым указателям означает, что компилятор должен предположить, что он может быть псевдонимом любого другого совместимого типа. Если компилятор просто рассматривал его как разыменование указателя, то эта возможность оптимизации была бы потеряна.

Edit
Как отмечено в комментарии, языковой стандарт определяет определение подкласса массива в терминах арифметики/разыменования указателя. Конечно, фактические компиляторы используют дополнительную информацию о том, что указатель действительно является массивом, поэтому они не обрабатываются точно так же, как указатели, но это можно считать оптимизацией, превышающей стандартные мандаты.

Ответ 2

Не так же, как на C99. C99 поддерживает Variable Length Array (VLA), но С++ этого не делает.

void f(int n)
{
   int array[n]; //valid C99, but invalid C++
}

Это означает, что компиляторы С++ не обрабатывают массивы так же, как компиляторы C (i.e C99).

Однако другая версия C (i.e C89) не поддерживает VLA. Таким образом, массивы C89 будут [почти] такими же, как массивы С++.

Ответ 3

Да, они обрабатываются одинаково. Однако в С++ вы, вероятно, не должны их использовать - исследуйте класс std::vector!

Ответ 4

Да. Массивы обрабатываются одинаково на C и С++. Однако С++ теперь имеет STL, который представляет собой набор структур данных и операций над ними, таких как string, vector, deque и т.д.

Ответ 5

Да, С++ - это расширенная версия языка C, отличная от ее интересных и привлекательных функций ООП. Strostrupp и другие разработали его с единственной целью создания объектно-ориентированного языка с синтаксисом типа C. По сути, оба они одинаковы в большинстве случаев (исключая возможности С++ OOP), и массивы не являются исключением.

"Массив - это в основном указатель на блок последовательной памяти, где имя массива представляет собой первое местоположение этого блока." Это утверждение верно для C и С++.

Реализация массива такая же, хотя есть некоторые ограничения в том, как компиляторы С++ позволяют вам их использовать.