www.gusucode.com > 《C++高级语言程序设计》PPT及全书例子源代码-源码程序 > 《C++高级语言程序设计》PPT及全书例子源代码-源码程序/code/C++例题程序/第6章/s6_8/smain6_8.cpp

    //Download by http://www.NewXing.com
//文件名:smain6_8.cpp
//内存的三种传递方法比较

#include <iostream>

using namespace std;

//利用指向指针的指针传值
void NewMemory1(char **lpszChar, int iNum)
{
	*lpszChar = new char[iNum];	//空间大小:(sizeof(char) * iNum)
	if (NULL == lpszChar)		//有时候为了避免误写成赋值语句,可才有此法
	{
		cout << "内存分配失败"  << endl;
		exit(0);
	}
}

void Test1(void) 
{
	char *lpszStr = NULL;
	NewMemory1(&lpszStr, 100);	// 注意参数是 &lpszStr,而不是lpszStr
	strcpy(lpszStr, "hello, world.");	
	cout<< lpszStr << endl;
	delete lpszStr;				//退出Test后,lpszStr消失,可不执行lpszStr = NULL
}

void NewMemory2( char *&lpszChar, int iNum )	//利用引用指针传值,参见6.4.1
{
	lpszChar = new char[iNum];		// 注意这里不再是*lpszChar.
	if ( NULL == lpszChar )			//有时候为了避免误写成赋值语句,可才有此法
	{
		cout << "内存分配失败"  << endl;
		exit(0);
	}
}

void Test2( void )
{
	char *lpszStr = NULL;
	NewMemory2( lpszStr, 100 );		//注意参数是 lpszStr,而不再是Test1的:&lpszStr
	strcpy( lpszStr, "hello, china." );	
	cout<< lpszStr << endl;
	delete lpszStr;					//退出Test后,lpszStr消失,可不执行lpszStr = NULL
}

//利用返回指针传递,安全容易理解
char *NewMemory3(int iNum)
{
	char *lpszChar = new char[iNum];	//空间大小:(sizeof(char) * iNum)
	if (lpszChar == NULL)
	{
		cout << "内存分配失败"  << endl;
		exit(0);
	}
	return lpszChar;
}

void Test3(void)
{
	char *lpszStr = NULL;
	lpszStr = NewMemory3(100);	
	strcpy(lpszStr, "hello, 四川大学计算机学院!.");
	cout<< lpszStr << endl;
	delete lpszStr;	
}

//测试函数。
void main()
{
	Test1();
	Test2();
	Test3();
}