以下の2つの関数に違いはありますか?どちらの場合も返されるローカル変数のアドレスではありませんが、f1() fnを使用すると正しい値4が返されますが、f2()は返されません。また、3番目のケースでは、文字列定数がスタックに格納されていないため、ポインターを返すと正常に機能するということは正しいです。また、文字列定数はどこに保存されていますか?
int* f1()
{
int* a=(int*)4;
return a;
}
int* f2()
{
int a=4;
return &a;
}
char* f3()
{
char* p="abcd";
return p;
}