Общий эффект от программы - просто неопределенное поведение.Он передает адреса в printf, но использует преобразование %d
, которое ожидает int.Несоответствие приводит к неопределенному поведению.
В типичном случае, когда int и указатель имеют одинаковый размер, он напечатает адрес в cdptr
и адрес cdarray[2]
.
Если вы хотите распечатать эти адреса, очевидным способом будет что-то вроде:
printf("%p", (void *)&cdarray[2]); // (void *)cdarray+2
printf("%p", (void *)cdptr);
Что касается того, что эти выражения "являются", это адреса - адреса началамассив и третий элемент массива соответственно.