c和指针(2)
char* a与char a[]的区别,const char* a与char* const a的区别
#include<iostream> using namespace std; void main(void) { // char* a 与 char a[] 的区别 char* a = "abcdef"; // a为一指针,其值可以改变。现在a指向的是一常量字符串 cout << a << endl; a = "ghijkl"; // a现在指向另一常量字符串 //a[0] = 'z'; // a指向的为常量,编译没问题,但运行出现异常 cout << a << endl; cout << sizeof(a) << endl; // 4 char b[] = "abcdef"; // b为数组首地址,为一常量,其值不可改变。所指内容不是常量字符串 cout << b << endl; //b = "ghijkl"; // 编译无法通过,b为常量,无法为其指定其它值 b[0] = 'z'; cout << b << endl; cout << sizeof(b) << endl; // 7 // ------------------------------------------------------------------------------ // const char* a 与 char* const a 区别 char c[] = "abcd"; char d[] = "efgh"; const char* pC = c; //pC[0] = 'z'; // 编译出错,pC为指向常量的指针,做不能修改指针指向的内容 cout << pC << endl; pC = d; cout << pC << endl; // pC指向的内容不能改,但可以修改指向 char e[] = "abcd"; char f[] = "efgh"; char* const pE = e; //pE = f; // pE为常量指针,不能改变其指向 pE[0] = 'z'; // pE为常量指针,虽然不能改变其指向,但可以修改指向内容 cout << pE << endl; } // 总结:(1) char* a这种形式:a为指针,可以改变其指向, // 其所指向的字符串为常量,不能修改其指向的内容。 // (2) char a[]这种形式,a为数组名,为常量,不能再 // 指向其它字符串,但其指向的内容不是常量字符串, // 故可以改变。 // (1) const char* a 为指向常量的指针,所指内容为常量, // 不能修改,但可以改变其指向,这种形式还与 // char const * a等价。 // (2) char* const a 为指针常量,不能改变其指向,但可 // 以修改其指向的内容。 // (3) const char* const a 为指向常量的常指针,即不能 // 改变其指向,也不能改变其指向的内容