2015-04-17 3 views
6

Ich habe ein Problem mit den Zeigern. Ich weiß, was das bedeutet:Nicht in der Lage, die Notationen zu verstehen: * und ** mit Zeigern

*name 

Ich verstehe, dass dies ein Zeiger ist.

Ich habe gesucht, aber ich weiß auch nicht verstehen, was dieser tut, noch habe ich hilfreiche Informationen

gefunden
**name 

Der Kontext int ** Name ist, nicht Multiplikation

Könnte mir jemand helfen?

+0

Zeiger auf Zeiger: http://www.tutorialspoint.com/cprogramming/c_pointer_to_pointer.htm – user4757345

+0

Wow, das war schnell! Danke an alle :) – MLMH

+4

Es hängt vollständig von dem Kontext ab, in dem '* name' und' ** name' stehen. – juanchopanza

Antwort

18

HINWEIS: Ohne den richtigen Kontext, die Verwendung von *name und **name ist nicht eindeutig. es kann porträtieren (a). Dereferenzierungsoperator (b) Multiplikationsoperator

Betrachtet man über ein Szenario wie

    reden
  • char * name;
  • char **name;

im Code,

  • *name

name ist ein Zeiger auf eine char.

  • **name

name ist ein Zeiger auf den Zeiger auf einen char.

Bitte verwechseln Sie nicht mit "double-pointer", der manchmal den Zeiger auf einen Zeiger bezeichnet, aber eigentlich einen Zeiger auf eine doppelte Datentypvariable bedeuten soll.

eine visuelle unter

enter image description here

Wie oben können wir

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

So sagen, p1 hier, ein Zeiger-to-Zeiger ist. Hoffe, das macht die Sache jetzt klar.

+0

@juanchopanza Danke für den Rat. Entsprechend aktualisiert. –

+0

danke @undur_gongor –

+0

was bedeutet "Zeiger auf einen Typ"? Sie können nicht auf Typen in C++ verweisen. – Adam

-2

** Name in diesem Fall. Wäre ein Zeiger auf einen Zeiger.

5

Zeiger speichert Adresse der Variablen, Zeiger auf Zeiger speichert Adresse eines anderen Zeigers.

int var 
int *ptr; 
int **ptr2; 

ptr = &var; 
ptr2 = &ptr; 

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

können Sie sehen here

8

Es ist eigentlich sehr einfach, diese betrachten:

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 

Wenn Sie jede Ebene als nur einen weiteren Variablentyp sehen (so finden * int als Typ) Es ist leichter zu verstehen. Ein anderes Beispiel:

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

Hoffe, dass hilft!

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;