В Си адрес первого элемента в массиве совпадает с адресом массива? - PullRequest
0 голосов
/ 09 июня 2011

Учтите это:

int i[50];
void *a = i; //i.e. = &i[0]
void *b = &i;

Будет ли a == b всегда верным или существуют платформы / компиляторы, где это не всегда может быть правдой?

Ответы [ 3 ]

5 голосов
/ 09 июня 2011

да, пункт 6.5.9 стандарта (оператор равенства) гласит:

Два указателя сравнивают равные, если ... оба являются указателями на один и тот же объект (включая указатель на объект иподобъект в начале)

1 голос
/ 09 июня 2011

Да, значение, приведенное к void*, совпадает ... но исходный тип не совпадает.

Имеет

int arr[100];

значение arr, когда онораспадается на указатель на свой первый элемент, имеет тип *int;
, значение &arr имеет тип int (*)[100]

0 голосов
/ 16 июня 2011

В этом конкретном случае, да, и a, и b будут одинаковыми, поскольку рассматриваемый массив равен 1D. К вашему сведению - это не так, если речь идет о двумерном или более крупномасштабном массиве? Читайте больше об указателе на массивы, в этом случае. Полезная для понимания концепция, хотя ее лучше избегать для поддержания хорошей читабельности кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...