2017-02-02 3 views
-2

мне нужно понять, в чем разница между:В чем разница между указателем на int и указателем на указатель на int в C++?

указатель на Int

и

указатель на указатель на Int

я не думаю, что вопросы языка но, чтобы быть в курсе, я беру C++.

Спасибо!

+0

«указатель на int» переменная, которая может содержать адрес (где в памяти вы можете найти что-то) «int». «указатель на указатель на int», который может содержать адрес переменной, который может содержать адрес 'int'. Первый отвечает на вопрос «Где я могу найти« int »? второй отвечает на вопрос «Где я могу найти, где я могу найти« int »? – user4581301

+0

, так что это не похоже на указатель на int, означающий массив одного измерения, а указатель на указатель - это массив из двух измерений? !! –

+0

Нет, но они могут быть использованы так, если бы ваш код был написан для обработки указателей как массивов. В этом случае адрес, который содержит каждый указатель, интерпретируется как первый элемент массива. –

ответ

2

Указатели - это только адрес памяти. Таким образом, указатель на int означает переменную, значение которой является адресом памяти для int, а указатель на указатель на int означает переменную, значение которой является адресом памяти указателя на int, а значение этого указателя на int - адрес памяти для int.

Предположим, вы определяете три переменные следующим образом.

int a = 184; // Plain int, value 184. 
int *b = &a; // Pointer to int, specifically pointing to a. 
int **c = &b; // Pointer to pointer to int, which points to b, which points to a. 

Вот как выглядят эти переменные в памяти. (Обратите внимание, что только значение фактически сохраняется в памяти. Тип выводится из кода, который использует эту память.)

 +------------+  +------------+  +------------+ 
type | int  |  | int*  |  | int**  | 
     +------------+  +------------+  +------------+ 
address | 0x02618368 |  | 0x02618372 |  | 0x02618376 | 
     +------------+ <--- +------------+ <--- +------------+ 
value | 184  |  | 0x02618368 |  | 0x02618372 | 
     +------------+  +------------+  +------------+ 

Таким образом, чтобы получить Int из c, вам нужно будет разыменованием его дважды. Первое замечание принимает значение от c, интерпретирует его как адрес указателя на int и ищет этот адрес для получения указателя на int, который равен b. Второе разыменование принимает значение от полученного указателя к int, интерпретирует его как адрес int и ищет этот адрес для получения int, который равен a.

+0

Да, это было непонятно. Я исправил это сейчас. –

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