有爬文发现前面有人问过类似问题
但仍然不太清楚
以下举例说明疑惑的点
int *manip()
{
int ret=5;
int *ptr = &ret;
return ptr; //compiler没有发出警告
}
int *manip2()
{
int ret = 3;
return &ret; //compiler有发出警告说 address of local variable returned
}
char *manip3()
{
char ret[]="123";
char *ptr = ret;
return ptr; //正常无警告
}
int main()
{
char *p3 = mainp3();
cout<<p3<<endl; //正常可执行 印出123
p3[0] = '9'; //正常可修改
cout<<p3<<endl; //印出正确 923
}
想请问各位大大,
1.manip()与manip2()是否为一样的动作?
那为什么compiler对于manip()不发警告?
是因为间接传回位址的关系所以侦测不出来吗?
2.manip3()回传的不是pointer to local array variable吗?
为什么可以正常执行甚至可以修改呢?
希望获得大大们的解答
非常感谢