Если вы попробуете этот фрагмент кода
#include<stdio.h> int main() {
// Pointer to an integer
int *p;
// Pointer to an array of 5 integers
int (*ptr)[5];
int arr[] = { 3, 5, 6, 7, 9 };
// Points to 0th element of the arr.
// Points to the whole array arr.
ptr = &arr;
printf("p = %p, address of P = %p\n", p, &p);
return 0; }
Вы получите что-то вроде p = 0x7fff8e9b4370, P address = 0x7fff8e9b4340
, что означает, что адрес указателя P является чем-то, а данные внутри него - другим
, ноесли вы попробуете то же самое с указателем массива, как это
#include<stdio.h> int main() {
// Pointer to an integer
int *p;
// Pointer to an array of 5 integers
int (*ptr)[5];
int arr[] = { 3, 5, 6, 7, 9 };
// Points to 0th element of the arr.
p = arr;
// Points to the whole array arr.
ptr = &arr;
printf("arr = %p, arr address = %p\n", arr, &arr);
return 0; }
Вы получите что-то вроде arr = 0x7ffda0a04310, arr address = 0x7ffda0a04310
Так почему же данные указателя совпадают с адресом указателя вобъем памяти ?!!когда мы разыменовываем адрес указателя arr, мы должны получить число 3, но как я понимаю из этого, адрес 0x7ffda0a04310
в памяти имеет 0x7ffda0a04310
в качестве данных
, так где я ошибаюсь?