#include<iostream>
using namespace std;
int teradata=65;
int &pointer(int *p2)
{
p2=&teradata;
return &p2;
}
int main()
{
int a=10;
int *p=&a;
int **p3;
p3=pointer(p);
cout<<p3;
return 0;
}
实际上,我正在尝试返回指针p2
的地址并将其存储在指针p3
中,该指针是一个指向double的指针。请帮助纠正该程序,并告诉我在此程序中所做的错误。
答案 0 :(得分:1)
操作&p2
返回p2
的地址。 p2
是指向int
的指针。因此,函数pointer
应该返回int **
而不是int &
:
int **pointer(int *p2) {
p2=&teradata;
return &p2;
}
答案 1 :(得分:1)
由于函数参数基本上是初始化的局部变量,因此如果变量是对象,则返回其地址将毫无用处。函数返回时该对象不再存在,因此地址本身也无效。
如果您实际上想要传递给该函数的指针变量的地址,则该函数需要接受对传递的指针变量的引用。而且,它需要指定正确的返回类型,这是指向指针的指针。
int **pointer(int *&p2) {
p2=&teradata;
return &p2;
}
您的代码不应该编译,并且您的编译器应该发出有关无效转换的诊断。