将指针传递给指向函数的指针而不创建临时指针

时间:2017-09-14 13:24:15

标签: c++ function pointers

让我们假设我有一个函数,它指向指针,如下所示:

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

无论如何要实现这个目标吗?

2 个答案:

答案 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)