2015-02-16 2 views
3

Почему мы не можем сохранить адрес указателя в другом указателе? Указатель - это всего лишь особый тип переменной и имеет некоторый адрес, но почему я не могу сохранить этот адрес в другой указатель?Адрес указателя

int main() 
{ 
    int * ptr; 
    int * q; 
    q = &ptr; 
} 

Почему этот код не так ли?

ответ

11

Вы можете сохранить адрес указателя - или любого другого типа объекта - другим указателем. Но вы должны получить правильный тип; вы пытаетесь сохранить адрес указателя в указателе на int, а не на указатель на указатель.

int ** q = &ptr; // pointer to pointer to int 
+0

Почему использовать **, любую логическую причину ?? –

+4

@NileshKumar: Это означает «указатель на указатель». В общем случае ' *' означает "указатель на' '"; поэтому 'int *' означает "указатель на' int' "и' int ** 'означает" указатель на указатель на 'int'". –

+2

Кроме того, тип «адрес-из» оператора '&' - _pointer-to-operand-type_. Поэтому, если у вас есть 'int foo' и do' & foo', то результатом будет 'int *'. Аналогично, если у вас есть 'char * bar' и do' & bar', то результатом будет 'char **'. Поэтому '&' добавляет еще одну звезду ;-) – DarkDust

Смежные вопросы