2015-04-17 15 views
6

Ho un problema con i puntatori. So cosa fa questo:Non riesco a capire le notazioni: * e ** con i puntatori

*name 

Capisco che questo è un puntatore.

Ho cercato ma faccio né capire che cosa questo si fa, né ho trovato utili informazioni

**name 

Il contesto è int nome **, non Moltiplicazione

Qualcuno potrebbe aiutarmi?

+0

puntatore al puntatore: http://www.tutorialspoint.com/cprogramming/c_pointer_to_pointer.htm – user4757345

+0

Wow che era veloce! Grazie a tutti :) – MLMH

+4

Dipende completamente dal contesto in cui '* nome' e' ** nome' sono. – juanchopanza

risposta

18

NOTA: Senza il giusto contesto, l'utilizzo di *name e **name è ambigua. può ritratto (a). dereference operatore operator (b) la moltiplicazione

Considerando si sta parlando di uno scenario come

  • char * name;
  • char **name;

nel codice,

  • *name

name è un puntatore ad un char.

  • **name

name è un puntatore, il puntatore a un char.

Si prega di non confondersi con "doppio puntatore", che a volte viene utilizzato per denotare il puntatore a un puntatore ma in realtà si suppone significhi un puntatore a una variabile di tipo doppio di dati.

Un visiva sotto

enter image description here

Come sopra, possiamo dire

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

Quindi, p1 qui, è un puntatore puntatore a. Spero che questo chiarisca le cose ora.

+0

@juanchopanza Grazie signore per il consiglio. Aggiornato di conseguenza. –

+0

grazie a @undur_gongor –

+0

cosa significa "puntatore a un tipo"? Non puoi puntare ai tipi in C++. – Adam

-2

** nome in questo caso. Sarebbe un puntatore a un puntatore.

5

puntatore memorizza l'indirizzo della variabile, puntatore al puntatore memorizza l'indirizzo di un altro puntatore.

int var 
int *ptr; 
int **ptr2; 

ptr = &var; 
ptr2 = &ptr; 

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

Potete guardare here

8

In realtà è molto semplice, considerare questo:

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 

Se si vede tutti i livelli come un altro tipo di variabile (così, vedi * int come tipo) , è più facile da capire. Un altro esempio:

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

Sperare che aiuti!

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; 
Problemi correlati