首先来看一下以下几种情况:
char c = 'M';
char s1[] = { 'M','o','n','d','a','y' };
char s2[] = "Monday";
int num[] = { 1,2,3 };
char* cpt = &c;
char* spt1 = s1;
char* spt2 = s2;
int* numpt = num;
cout << cpt << endl;
cout << spt1 << endl;
cout << spt2 << endl;
cout << numpt << endl;
输出结果:
M烫烫??帔 //乱码
Monday烫烫烫烫烫烫蘉烫烫M?p鹽 //乱码
Monday //正常输出
00D9FA90 //地址
原因分析:
可以看到第一和第二个输出是乱码的,而第三个输出了字符串,第四个输出的是地址,原因是将字符地址或者字符数组名赋值给char*指针时,使用cout会直接输出指针所指的字符,而不是输出地址(上述程序第四个指向整型数组的指针输出的就是地址),并且其指针会从字符开始位置一直往后读字符,直到结束符号‘\0’才停止输出,而 char c = 'M’和char s1[ ] = { ‘M’,‘o’,‘n’,‘d’,‘a’,‘y’ }中并没有结束符号,所以输出乱码。
459

被折叠的 条评论
为什么被折叠?



