2015-04-17 7 views
6

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

*name 

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

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

**name 

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

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

+0

указатель на указатель: http://www.tutorialspoint.com/cprogramming/c_pointer_to_pointer.htm – user4757345

+0

Wow, что было быстро! Спасибо всем :) – MLMH

+4

Это полностью зависит от контекста, в котором '* name' и' ** name'. – juanchopanza

ответ

18

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

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

  • char * name;
  • char **name;

в коде,

  • *name

name является указателем на char.

  • **name

name является указателем, с указателем на char.

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

Визуальное ниже

enter image description here

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

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

Итак, p1 здесь, указатель указатель на. Надеюсь, теперь все ясно.

+0

@juanchopanza Спасибо, сэр за совет. Соответственно обновлено. –

+0

thanks @undur_gongor –

+0

Что означает «указатель на тип»? Вы не можете указывать на типы в C++. – Adam

-2

** name в этом случае. Будет указателем на указатель.

5

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

int var 
int *ptr; 
int **ptr2; 

ptr = &var; 
ptr2 = &ptr; 

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

Вы можете посмотреть here

8

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

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! 

Надежда, что помогает!

0
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; 

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

  • Нет связанных вопросов^_^