2013-06-29 4 views

ответ

3

При использовании в выражениях ссылки на объекты типа array-of-T (т. Е. Имена массивов) распадаются на указатели на их первый элемент. [1] Результирующий тип таких указателей: pointer-to-T.

Также, когда вы получаете доступ к элементу массива по индексу, он получает разыменование. Вот почему вы используете &, чтобы получить его адрес.

Чтобы обернуть его в выражениях вы вывесили

  • c приравнивает к &c[0]
  • c[1] это значение во второй позиции в массиве. &c[1] - его адрес памяти, то есть указатель на него.

[1] Есть четыре заметных исключений из этого факта: когда массив является операндом sizeof, & или - так C11 - _Alignof оператора, или когда это строковым инициализатор массив символов. Ссылка: http://c-faq.com/aryptr/aryptrequiv.html.

+2

Пожалуйста, dowvoters, объяснить себя. –

+2

Массивы не указатели. http://c-faq.com/aryptr/aryptr2.html –

+4

Нет, имя массива не является указателем. Это _converted_ для указателя, если это не операнд оператора sizeof или address ('&'), или строковый литерал, используемый для инициализации массива. –

4

Когда вы выполняете задание, обе стороны назначения должны быть Тип совместим.

В некоторых сценариях имя массива распадается как указатель на его первый элемент. Так c возвращает указатель на голец, т.е. char * в то время как &c дает адрес массива, который явно не от типа char * (типа str является char*), несоответствие типа дает диагностику в виде ошибки компиляции.

&c[1] дает вам char * в то время как c[1] дает значение по этому показателю, то есть: char. В этом случае типp снова char * и, следовательно, наблюдаемый результат.


Хорошо читать:
How do I use arrays in C++?

+1

Это не просто имя массива, которое преобразуется в указатель на его первый элемент. ** Любое выражение массива ** преобразуется в указатель на его первый элемент (кроме случаев, когда он является операндом 'sizeof',' & 'или' _Alignof' или представляет собой строковый литерал, инициализирующий массив). Итак, если 'x' объявлен как' int x [3] [4] [5] ', то' * (x [2] +1) 'преобразуется в указатель на' int', потому что это указатель к массиву из пяти 'int'. (Результат преобразования совпадает с символом '& x [2] [1] [0]'.) –

+0

@EricPostpischil: True. –

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