#include<stdio.h>
#include<stdlib.h>
char* re()
{
char *p = "hello";
return p;
}
int main()
{
char* tem = re();
printf("%s", tem);
return 0;
}
我的編譯器是Dev-C++。 我認爲're'函數完成時,'p'的指針將被刪除,'p'指向的堆棧空間也會被刪除。所以'tem'的指針不能訪問'p'指向的堆棧空間。 在我看來,這段代碼會出現一些錯誤。但爲什麼不呢?c語言和一些指針的疑惑
這個問題歪曲了我很長一段時間。如果你能告訴我理由,我會感激你的善良的心。
指針p將超出範圍。但是它的*值*(它指向的)將被返回給調用者(main)。它(值)指向一個字符串,它在re()返回後仍然存在。 – wildplasser