【发布时间】:2020-04-16 15:49:41
【问题描述】:
当传递 a=4 时,给定函数返回:
int* temp1(int a)
{
int b = a*2;
return &b;
}
int* temp2(int a)
{
int b = a*2;
int *p = &b;
return p;
}
int main()
{
cout << *temp1(4); // error
cout << *temp2(4); // output = 8
}
为什么以上两个函数有不同的行为? 然而,下面有相同的输出?
int a = 3;
cout << *(&a); // 3
和
int a= 3;
int *p = &a;
cout << *p; // 3
【问题讨论】:
-
没有区别,但请注意,您返回的是局部变量的地址(分配在函数的堆栈帧上),该地址在函数调用完成时会自动释放,因此调用者指向无效内存.
标签: c++ pointers function-pointers