Причина, по которой my_array
и &my_array
приводит к тому же адресу, может быть легко понята, когда вы смотрите на макет памяти массива.
Допустим, у вас есть массив из 10 символов ( вместо этого 100 в вашем коде).
char my_array[10];
Память для my_array
выглядит примерно так:
+---+---+---+---+---+---+---+---+---+---+
| | | | | | | | | | |
+---+---+---+---+---+---+---+---+---+---+
^
|
Address of my_array.
В C / C ++ массив распадается на указатель на первый элемент в выражении, таком как
printf("my_array = %p\n", my_array);
. Если вы посмотрите, где находится первый элемент массива, вы увидите, что его адрес совпадает с адресом массива:
my_array[0]
|
v
+---+---+---+---+---+---+---+---+---+---+
| | | | | | | | | | |
+---+---+---+---+---+---+---+---+---+---+
^
|
Address of my_array[0].