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

    //Download by http://www.NewXing.com
//文件名:smain6_7.cpp
//数组与指针的比较

#include <iostream>

using namespace std;


//测试函数。
void main()
{
	//数组定义,内存中只分配数组空间。
	char a1[] = "hello";		//定义数组并初始化
	a1[0] = 'O';				//数组的元素值是可以改变的。
	cout << a1 << endl;			//显示:Oello

	//定义一个指针变量,且指针指向了一个常量字符串。
	//内存中分配两个空间:指针变量空间;常量字符串空间。
	char *p1 = "world";			// 注意p1指向常量字符串
	//p1[0] = 'X';				// 该语句编译器不能发现其错误,但运行时会发现。
								//p1指向的是一个常量,该语句试图修改常量。
	cout << p1 << endl;			//显示:world

	// 数组赋值的方法
	char a2[] = "hello";        //数组初始化表示,此处并没有得到一个常量字符串。
	char b1[10];
	strcpy(b1, a2);				// 赋值数组的方法。不能用	b1 = a2;会发生编译错误
	if (strcmp(b1, a2) == 0)	// 比较数组的方法。不能用  if (b1 == a2)
	{
		cout << b1 << endl;		//显示:hello
	}

	// 复制指针所指向的字符串的方法
	int len = strlen(a2);
	char *p2 = new char[len+1];	//千万注意空间大小,为何要+1
	if (p2 == NULL)
	{
		cout << " 内存分配失败。" << endl;
		exit(0);
	}
	strcpy(p2, a2);				// 不要用 p2 = a2;如这样用,则只是p2指向了数组a2
								//而已,而刚才p2 new的那一部分内存空间则泄漏了。
	if (strcmp(p2, a2) == 0)	// 不要用 if (p2 == a2),那样只能够判断p2是否指向了a2.
	{
		cout << p2 << endl;		//显示:hello 
	}
	delete p2;
	p2 = NULL;					//这种操作是必须的。

	//字符指针变量的长度和该指针所指向的字符串的长度的区别
	char a3[] = "hello world";	//a3是一个数组。其空间大小是数组的空间大小。
	char *p3  = a3;				//p3只是一个指针变量,其大小只是变量本身的大小。
	cout<< sizeof(a3) << endl;	// 12字节
	cout<< sizeof(p3) << endl;	// 4字节
}