Являются ли int * и int ** разными типами? C ++ - PullRequest
0 голосов
/ 06 ноября 2019

Мне было любопытно, как указатель на переменную-указатель мог бы сказать, дается ли ей только обычная переменная-указатель или указатель на указатель.

Я попробовал этот код ниже и получил эту ошибку:

int x = 3;
int** y = &x;

prog.cpp:7:12: error: invalid conversion from ‘int*’ to ‘int**’ [-fpermissive]

Правильно ли говорить, что &x - это тип int*, который отличается от типа int** и т. Д.

Ответы [ 4 ]

5 голосов
/ 06 ноября 2019

int * - указатель на целое число, а int ** - указатель на целое число.

4 голосов
/ 06 ноября 2019

Указатель (например, int *) - это переменная, которая содержит адрес памяти, в которой находится значение (например, int).

& x обозначает адрес x в памяти, как и y * ниже.

int* y = &x;

Указатель указателя (например, int **) - это переменная, которая содержит адрес памятиуказатель (например, int *) адреса памяти. Используя приведенный выше пример, мы можем сказать, что & y обозначает указатель на указатель.

int** p = &y;
0 голосов
/ 06 ноября 2019

при объявлении int * x;означает, что x содержит адрес для ячейки памяти, которая содержит данные int. но int ** x;означает, что x содержит адрес другой переменной, которая содержит адрес другой переменной, содержит данные int;

также вам следует объявить переменную до получения ее указателя

int x=10;
int* px=&x;
int** ppx=&px;
0 голосов
/ 06 ноября 2019

int* - это целочисленный указатель, который содержит адрес целого числа.

int** - это целочисленный двойной указатель, который содержит адрес целочисленного указателя.

USAGE:

int* p1 = &i; Где i - это переменная int.

int** p2 = &p1;, где p1 - это указатель int.

Еще: int* использовать для 1D-массивов и int** использовать для 2D-массивов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...