以下两个函数之间是否存在任何差异,两种情况都不是返回局部变量的地址,而是使用f1()fn返回正确的值4但不返回f2().同样在第三种情况下,我对此认为字符串常量不存储在堆栈中,因此当我们返回指针时它将正常工作.那么存储字符串常量的位置呢?
int* f1()
{
int* a=(int*)4;
return a;
}
int* f2()
{
int a=4;
return &a;
}
char* f3()
{
char* p="abcd";
return p;
}
Run Code Online (Sandbox Code Playgroud)
所有这些之间都存在差异:
int *值为4的值,注意它不指向值为4的变量,而是指向地址4.char *而不是const char *,可能会尝试修改返回缓冲区,这将再次导致未定义的行为.