2017-02-14 16 views
3

Ich bin Anfänger von C Programmiersprache. Ich sah einen Code auf dem Buch:Was bedeutet "int * * k"?

#include<stdio.h> 
int main(){ 
    int * * k, *a, b=100; 

    a = &b; 
    k = &a; 
    printf("%d\n",* * k); 
} 

Ich weiß nicht, die Bedeutung von int * *k. Ist das ein ganzzahliger Zeiger oder Wert? Worauf wird es hinweisen? Was wird es enthalten/speichern? Was nutzt diese Variable? Wie kann ich diesen Ausdruck verstehen?

+0

Es ist zwei Ebenen Zeiger Dereferenzierung. – haccks

+1

"k" ist ein Zeiger, der auf einen Ganzzahlzeiger zeigt – zzn

Antwort

2

int** k ist ein Zeiger auf einen Zeiger int.

Es speichert eine Speicheradresse, in der Speicheradresse eine andere Speicheradresse, in der ein ganzzahliger Wert gespeichert ist.

8
int **k 

k ist ein Zeiger auf int Zeiger auf (Doppelzeiger) und hält eine Adresse eines anderen Zeigervariable.

In Ihrem Beispiel:

int b = 100; /* 'b' is an int, initialized to value 100 */ 
int *a = &b; /* a is a pointer-to-int*/ 
int **k = &a; /* k is a pointer-to-pointer-to-int */ 

Siehe Bild unten zum besseren Verständnis:

ptr

+0

Vielen Dank.Können Sie mir sagen, in welcher Situation dieser Pointer-to-a-Pointer verwendet wird? –

+1

@BingSun Wenn wir eine Liste von Wörtern (ein Satz) wollen, können wir das verwenden. – rsp

+1

@BingSun Siehe Stapelüberlauf Frage: http://StackOverflow.com/Questions/5580761/Why-use-double-pointer-oder-Why-use-Pointers-ToPointer – rsp

1

Es Doppelzeiger genannt wird. Es kann verwendet werden, um die Adresse von einem einzelnen Zeiger zu speichern.

Sie können auch einen Dreifachzeiger erstellen, um die Adresse vom Doppelzeiger zu speichern.

Beispiel: int ***k;

1

Dies wird Zeiger auf einen Zeiger genannt.

Hier ist die Ausgabe für ** k 100, der Wert von b.

*(*k) = *(a) = *(address of b) = value of b 
1
*k 

bedeutet, dass einige Code später einen Wert von Adresse k erhalten wird.

*(*k) 

bedeutet, dass einige Code einen Wert von Adresse (* k) später erhalten.

int **k 

bedeutet k bestimmt ist für die Adresse verwendet werden Dereferenzieren für ganzzahlige Gebrauch aber mit einer zweiten Ebene. Wenn Sie dieses * Zeichen direkt hinter einem Variablennamen an seiner Definition haben, wird daraus ein Zeiger. So ist k ein Zeiger auf einen Zeiger auf eine ganze Zahl.

Um den Wert der Zelle zu erhalten, die ein Zeiger auf,

*k 

genau wie in der Definition verwendet wird. Dann, wenn es ein Zeiger zweiter Ordnung ist, wird

verwendet, um seinen spitzen Wert zu erhalten.