У меня проблема с указателями. Я знаю, что это делает:
*name
Я понимаю, что это указатель.
Я искал, но я не понимаю, что это делает, и я не нашел полезную информацию
**name
Контекст это имя ** **, а не умножение
Может ли кто-нибудь помочь мне?
ПРИМЕЧАНИЕ. Без надлежащего контекста использование
*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
здесь указатель на указатель. Надеюсь, это прояснит ситуацию сейчас.
Это на самом деле очень просто, рассмотрим это:
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!
Надеюсь, это поможет!
указатель хранит адрес переменной, указатель на указатель хранит адрес другого указателя.
int var
int *ptr;
int **ptr2;
ptr = &var;
ptr2 = &ptr;
cout << "var : " << var;
cout << "*ptr : " << *ptr;
cout << "**ptr2 : " << **ptr2;
Ты можешь посмотреть Вот
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;
** имя в этом случае. Был бы указатель на указатель.