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
}