www.gusucode.com > 《C++高级语言程序设计》PPT及全书例子源代码-源码程序 > 《C++高级语言程序设计》PPT及全书例子源代码-源码程序/code/C++例题程序/第6章/s6_9/smain6_9.cpp
//Download by http://www.NewXing.com //文件名:smain6_9.cpp //内存的传递方法比较 #include <iostream> using namespace std; char *GetString1(void) { //是一个局部数组,位于栈空间中。而不是位于静态数据存储空间 char aChar[] = "hello world"; //声明并初始化一个数组,不过这是一个局部数组, //退出函数时,数组消失。数组位于栈空间中 return aChar; //编译器将提出警告。因为aChar是一个局部性质的数组, //而返回值为指针,指针指向该数组,退出函数后 //该数组消失,此时,指针指向了垃圾 } void Test1(void) { char *lpszStr = NULL; lpszStr = GetString1(); //lpszStr的内容是垃圾 cout << " 栈内存调用的结果为:" << lpszStr << endl; } char *GetString2(void) { //得到一个局部指针变量(aChar)和一个位于静态存储区的字符串常量"hello world", //静态字符串,不会随函数的消失而消失。它一直保持到程序运行结束 char *aChar = "hello world"; return aChar; //所以该指针可以正常返回 } void Test2(void) { char *lpszStr = NULL; lpszStr = GetString2(); //返回了正确的内容 cout << "静态内存调用的结果为:" << lpszStr << endl; } //测试函数 void main() { Test1(); //输出垃圾 Test2(); //输出:hello world }