Здесь p
- это целочисленный указатель, который может содержать адрес int
переменной, но также имеет адрес памяти - там, где он хранится.Как адрес указателя, который содержит адрес массива, одинаковый?
пусть базовый адрес массива a = 1002
адрес указателя p = 2008
когда мы пишем: int *p=a; //p points to the base address of array a
и int **r=&p; //means *r points to the address of p
как *r
указывает на адрес a
, он должен указывать на адрес p
.
#include <stdio.h>
void main()
{
int a[3] = {1, 2, 3};
int *p =a;
int **r = &p;
printf("%p %p", *r, a);
}
Почему бы и нет? Вы позволяете 'r' указывать на адрес, где хранится' p', а затем печатать '* r', поэтому очевидно, что это' p', который вы назначили 'a' – marcolz
Это должно быть int * p = & a; или иначе это неверное преобразование –
@DevangJayachandran: 'int [3]' распадается на 'int *' – Jarod42