2017-09-14 3 views
1

nehmen wir an, ich eine Funktion, die einen Zeiger wie diese Zeiger nimmt:einen Zeiger vorbei zu einer Funktion Zeiger ohne temporäre Zeiger zu schaffen

void foo (int** p){ 


// do stuff 

} 

meine Frage ist, wie kann ich einen Zeiger auf Zeiger auf diese passieren Funktion ohne temporären Zeiger zu machen?

// sample code: 
int a=10; 
int* pa=&a; // temporary pointer 
foo (&pa);  // passes a pointer to pointer , but requires a temporary pointer 

foo (&&a);  // this does not compile 

ist es sowieso, um dies zu erreichen?

+1

Nicht im Standard C++. – StoryTeller

+2

Worauf sollte p hinweisen, wenn Sie keinen temporären Zeiger haben? – UKMonkey

+1

Was erwarten Sie zu erreichen? Der Typ jeder an eine Funktion übergebenen Argumente muss im Allgemeinen dem Typ entsprechen, der von der Funktion erwartet wird. – Peter

Antwort

1

Es ist nicht möglich. int** zeigt auf eine Speicherzelle mit int* Wert. Diese Speicherzelle sollte explizit zugewiesen werden.

Sie können jedoch wickeln foo Anrufe in eine Inline-Funktion oder ein Makro, die das tun:

inline void foo_(int* p) { int** p2 = &p; foo(p2); } 

#define foo_(p) do { int* p1 = p; int** p2 = &p1; foo(p2); } while(0) 
+1

Sie sollten #define nicht als Inline-Funktionsersatz vorschlagen, es ist eine schlechte Übung und eher wie C, nicht C++. Inliner zum Compiler lassen – R2RT

2

Kurz gesagt, nein. Sie können nicht die Adresse der Adresse von etwas haben, das nicht existiert. Aus diesem Grund müssen Sie einen Zeiger auf die Adresse deklarieren und dann die Adresse dieses Zeigers erhalten.

Address Value Symbol 
0x20  0xFF a 
0x30  0x20 pa 

Sie müssen darüber nachdenken, wie sie zusammen zu verketten. pa enthält einen Wert, der auf die Adresse a zeigt. Wenn Sie pa nicht haben, haben Sie keinen indirekten Verweis auf a und daher kann der Zeiger auf die Adresse nicht erhalten, wie Sie nur den Wert und die Adresse a haben. Ist das sinnvoll?

Denken Sie daran, als ob Sie nicht auf sich selbst zeigen können, weil Sie in Wirklichkeit Sie selbst sind, aber jemand anders kann auf Sie zeigen.

Verwandte Themen