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(); }