让我们假设我有一个函数,它指向指针,如下所示:
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
无论如何要实现这个目标吗?
答案 0 :(得分:2)
简而言之,没有。您不能拥有不存在的地址。这就是为什么你需要声明一个指向地址的指针然后获取该指针的地址。
Address Value Symbol
0x20 0xFF a
0x30 0x20 pa
你必须考虑将它们链接在一起。 pa
包含一个指向a
地址的值。如果您没有pa
,则没有间接引用a
因此无法获得指向该地址的指针,因为您只有a
的值和地址。那有意义吗?
想想它就像你不能指向自己,因为你实际上是你自己,但其他人可以指向你。
答案 1 :(得分: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)