#include <iostream>
using namespace std;
char* Output(void)
{
//char p[]="Hello World!"; //------1
//使用这一行时编译器警告,输出乱码(也可能正常输出)。
char *p="Hello World!"; //-----2
//使用这一行时编译器没有警告,正常输出。
return p;
}
int main(int argc, char* argv[])
{
int v =10;
char *str = NULL;
str=Output();
cout<<str<<endl;
return 0;
}
当使用Output中“1”处的代码,编译器(无论VC的还是Linux下的)都发出警告,输出为乱码。
当使用Output的“2”处的代码,编译器(无论VC的还是Linux下的)都无警告,且顺利得到“Hello World!”。
分析原因发现,在“1”中“Hello World!"存放在栈中,而"2"中“Hello World!"存放在堆里面,而指针放在栈里.估计这就是输出结果不同的原因吧.