2013-10-19 66 views
0

为什么我无法通过函数初始化具有预定义指针变量的引用变量?使用函数将参考变量初始化为指针

int * f(int * p) { 
    return p; 
} 

int main(){ 
    int s=10; 
    int *p=&s; 
    int *&ref1 = p; //no error given here 
    int *&ref2 = f(p); //gives error cannot initialize int * & with int * why?? 
} 

回答

0

你的价值在这里返回一个指针:

int* f(int* p) 
^^^^ 

这是一个副本,一个临时的,这意味着你不能保持对它的引用。

+2

你确定你想提出的“修复”而不看到'f'的实现吗?你可能只是通过创建编译器没有捕获的悬挂引用来创建下一个更糟糕的问题。 –

+0

@DanielFrey我假设他正在返回'main'内创建的指针。 – 0x499602D2

+0

你将如何获得该指针?注意'f'的参数是该指针的一个*副本,所以你不能返回一个引用! –

0

这是行不通的,因为您试图引用由f(p)返回的指针,该指针是在表达式末尾超出范围的临时值。你会创建一个悬挂引用,编译器阻止你这样做。