2014-01-02 3 views
1

В C++ идентификатор массива - это указатель, а в java-идентификаторе массива - эталонная переменная (практически указатель).назначение массива в C++

Предположим, что имеется массив a и b. Как это происходит в java, эта операция разрешена:

a = b; //the reference that 'b' holds will be copied to 'a' so both a and b point to the same array 

, но на C++ то же действие будет считаться недействительным.

Если a и b являются указателями в C++, поэтому адрес, что b имеет место не будет скопирован в a?

+1

Ваше первое заявление неверно. Это влияет на последующее. C++-массив не является указателем. Тем не менее, язык * мог * поддерживать аргумент массива, поэтому общий вопрос хорош. – juanchopanza

+0

Они разные langauges, поэтому они ведут себя по-разному. – Devolus

+0

@juanchopanza я не сказал, что «массив - это указатель». Я сказал, что идентификатор массива - это указатель – gandalf

ответ

0

В C++ ссылки массива - это const указатели, но на Java они не являются ни указателями, ни неявно постоянными.

+0

@ T.J.Crowder Да, надеюсь, теперь ответ будет выглядеть лучше. –

+0

Ну, «... неявно« указатели const »...» неверны. Массивы - это их собственная вещь на C++. Как отметил juanchopanza, во многих случаях они * деградируют * до указателей на первый элемент массива, но это не одно и то же. –

3

Массивы на самом деле не являются указателями, они просто деградируют до указателей (которые указывают на первый элемент, который они содержат). На самом деле это капли данных. Вы не можете изменить расположение массива в C++, потому что в памяти нет места, где хранится указатель; это просто смещение в структуру или стоп-фрейм.

+0

Но у вас может быть оператор присваивания, который копирует группы одного массива в другой, вместо того, чтобы звонить, скажем, 'std :: copy'. – juanchopanza

+1

Но это было бы неинтуитивно, по моему мнению, поскольку массивы деградируют до указателей (они не ортогональны другим проектам C, например, структурам.) Если вы хотите поведение на C++, я бы сказал, что вы должны попробовать 'std :: array' - единственные недостатки, заключающиеся в том, что многомерный синтаксис сосет. (По-видимому, для решения этой проблемы есть решение C++ 11.) –

+0

Согласен. Это связано с тем, что массивы ведут себя особенным образом в C, что было бы странно «расширить» их интерфейс с назначением и т. Д.Вероятно, это одна из причин этого. – juanchopanza

Смежные вопросы