**代碼**:
~~~
#include <stdio.h>
char* GetString1()
{
char p[] = "Hello World";
return p;
}
char* GetString2()
{
char *p = "Hello World";
return p;
}
int main()
{
printf("GetString1 returns: %s. \n", GetString1());
printf("GetString2 returns: %s. \n", GetString2());
return 0;
}
~~~
(感謝網友提供的題目)
**疑**:以上輸出結果是什么情況?
………………………………………………………………………………………………………………………………………………………
解答:結果是GetString1()是亂碼,GetString2()是 “Hello World”。因為GetString1()返回的是是指向該函數作用域里的局部變量char p[]的首內存空間,而當函數返回到主函數時,該內存空間將會被釋放,所以P指向了一個無效的內存空間。而GetString2()中的p是指向全局對象(字符串“Hello World”)的,所以是“HelloWorld”.
======= welcome to my HomePage([*http://blog.csdn.net/zhanxinhang*](http://blog.csdn.net/zhanxinhang)) to have a?communication =======
……………………………………………………………………………………………………………………………………