我想了解以下两个C程序之间的区别。
第一个程序:
第二个程序:
在这两种情况下,本地变量(b)的地址被返回并赋值给a。我知道当b超出范围时,指针a所指向的内存不应该被访问。然而,在编译以上两个程序时,只有第二个程序会收到以下警告:
“warning C4172: returning address of local variable or temporary”
为什么第一个程序没有类似的警告?
第一个程序:
void main()
{
int *a;
{
int b = 10;
a=&b;
}
printf("%d\n", *a);
}
第二个程序:
void main()
{
int *a;
a = foo();
printf("%d\n", *a);
}
int* foo()
{
int b = 10;
return &b;
}
在这两种情况下,本地变量(b)的地址被返回并赋值给a。我知道当b超出范围时,指针a所指向的内存不应该被访问。然而,在编译以上两个程序时,只有第二个程序会收到以下警告:
“warning C4172: returning address of local variable or temporary”
为什么第一个程序没有类似的警告?