我的問題是關於這兩種情況下:Ç - 返回本地指針VS局部變量
#include <stdio.h>
int *foo1();
int *foo2();
int main()
{
printf("so it's %d\n",*foo1());
printf("so it's %d\n",*foo2());
}
int *foo1()
{
int i1 = 5;
return &i1;
}
int *foo2()
{
int i2 = 5;
int *p = NULL;
p = &i2;
return p;
}
案例1:當它與foo1()的情況下,我們得到的,因爲我們正試圖返回一個錯誤地址拷貝到主其數據已被刪除(當我們退出foo1()函數)
案例2:但在foo2的(),它不給雖然我們正在返回副本錯誤數據將被刪除的局部變量的指針d在我們退出foo2()函數後,爲什麼會這樣?
TL; DR:爲什麼foo2()不給出錯誤,但foo1()呢?
TIA。
C或C++?另外,g ++,[給出兩者的警告](http://coliru.stacked-crooked.com/a/5ee45849a93cd26d) – NathanOliver
我相信這與* foo1 *返回一個右值而* foo2 *返回一個左值,即使指針地址本身無效,該值也是有效的返回值。 – abe
爲什麼是雙標籤? – StoryTeller