2017-09-14 63 views
1

讓我們假設我有一個函數,指針的指針這樣的:傳遞一個指針指向一個功能,而無需創建臨時指針

void foo (int** p){ 


// do stuff 

} 

我的問題是如何傳遞的指針指向此函數沒有做出臨時指針?

// 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 

有無論如何要實現這一目標嗎?

+1

不是標準的C++。 – StoryTeller

+2

那麼,如果你沒有臨時指針,那麼應該指出什麼? – UKMonkey

+1

你期望達到什麼目標?傳遞給函數的每個參數的類型通常必須與函數期望的類型匹配。 – Peter

回答

1

這是不可能的。 int**指向一個擁有int*值的內存單元。這個存儲單元應該被明確分配。

但是,您可以換foo電話接入內聯函數或宏,這將做到這一點:

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

你不應該提出#define作爲內聯函數替換,它是一個糟糕的實例,更像C,而不是C++。將內聯留給編譯器 – R2RT

2

總之,沒有。您不能擁有不存在的地址的地址。這就是爲什麼你需要聲明一個指向該地址的指針,然後得到該指針的地址。

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

你必須考慮它像鏈接在一起。 pa包含一個值,指向a的地址。如果您沒有pa,則您沒有間接引用a,因此無法獲得指向該地址的指針,因爲您只有a的值和地址。那有意義嗎?

認爲它就像你不能指向自己,因爲你是,其實,你自己,但別人可以指向你。

相關問題