Не в состоянии понять обозначения: * и ** с указателями

У меня проблема с указателями. Я знаю, что это делает:

*name

Я понимаю, что это указатель.

Я искал, но я не понимаю, что это делает, и я не нашел полезную информацию

**name

Контекст это имя ** **, а не умножение

Может ли кто-нибудь помочь мне?

6

Решение

ПРИМЕЧАНИЕ. Без надлежащего контекста использование *name а также **name неоднозначно. это может портрет (а). оператор разыменования (б) оператор умножения

Учитывая, что вы говорите о сценарии, как

  • char * name;
  • char **name;

в коде,

  • *name

name это указатель на char,

  • **name

name указатель на указатель на char,

Пожалуйста, не путайте с «двойным указателем», который иногда используется для обозначения указателя на указатель, но фактически должен означать указатель на переменную двойного типа данных.

Визуал ниже

введите описание изображения здесь

Как и выше, мы можем сказать

char value = `c`;
char *p2 = &value;   // &value is 8000, so p2 == 8000, &p2 == 5000
char **p1 = &p2;     // &p2 == 5000, p1 == 5000

Так, p1 здесь указатель на указатель. Надеюсь, это прояснит ситуацию сейчас.

18

Другие решения

Это на самом деле очень просто, рассмотрим это:

int a; // a is an int
int* b; // b is a pointer to an int
int** c; // c is a pointer to a pointer to an int

Если вы видите каждый уровень как просто другой тип переменной (поэтому смотрите * int как тип), это будет легче понять.
Другой пример:

typedef int* IntPointer;
IntPointer a; // a is an IntPointer
IntPointer* b; // b is a pointer to an IntPointer!

Надеюсь, это поможет!

8

указатель хранит адрес переменной, указатель на указатель хранит адрес другого указателя.

int var
int *ptr;
int **ptr2;

ptr = &var;
ptr2 = &ptr;

cout << "var : " << var;
cout << "*ptr : " << *ptr;
cout << "**ptr2 : " << **ptr2;

Ты можешь посмотреть Вот

5

int a = 5;// a is int, a = 5.
int *p1 = &a; // p1 is pointer, p1 point to physical address of a;
int **p2 = &p1; // p2 is pointer of pointer, p2 point to physical adress of p1;

cout<< "a = "<<a << " *p1 = "<<*p1<<" *(*p2) = " << *(*p2)<<endl;
0

** имя в этом случае. Был бы указатель на указатель.

-2
По вопросам рекламы [email protected]