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字节 }