直接看例子
#include <iostream>#include <string>using namespace std;int main(){ char* a = "12345"; char b[] = "12345"; cout << a << endl; //输出12345 cout << b << endl; //输出12345 cout << sizeof(a) << endl; //4,a是一个指针,大小为4 cout << sizeof(b) << endl; //6,输出字符串b的长度,末尾有一个'/0' //a[0] = '1'; //运行时报错,因为a指向的内容是常量 b[0] = '2'; //修改成功 a = b; a[0] = '1'; //修改成功,因为a现在指向的是b,是一个字符串数组,不是常量 cout << (void*)a << endl; //输出a,a为char指针,本质上是个地址, //但是输出char指针会输出其指向的字符串,所以要抓换成其他类型的指针 cout << (void*)b << endl; //同上 cout << &(a[1]) << endl; //输出2345,以为对a[1]取地址之后,本质上又变成了一个char* cout << &(b[1]) << endl; //同上 cout << (void*)&a[1] << endl; cout << (void*)(a + 1) << endl; //两种方式都能输出a[1]的地址 const char* c = "12345"; //c[1] = 1; //编译报错,因为c指向的内容是const的 c = b; //但是c不是const的,可以修改指向 char* const d = b; d[1] = '1'; //修改成功,b是字符串数组,不是常量 //d = a; //编译报错,因为d本身是const的 const char i[] = "12345"; //i[0] = '1'; //编译报错 //i = b; //编译报错 char const j[] = "12345"; //j[0] = '1'; //编译报错 //j = b; //编译报错 //所以i和j两种写法都是同一种类型,没有区别。 return 0;}
新闻热点
疑难解答