@CrazyHenry
2018-02-01T11:16:00.000000Z
字数 1075
阅读 1079
ccccC++Primer
- Author:李英民 | Henry
- E-mail: li
_
yingmin@
outlookdot
com- Home: https://liyingmin.wixsite.com/henry
快速了解我: About Me
转载请保留上述引用内容,谢谢配合!
C++中,标准IO库定义了,输出一个字符型指针,就会将该指针所指以及连续内存中所有的字符输出,直到遇到'\0'
。
同时,在string标准库中还重载了<<
运算符,输出string的对象,就会输出string对象存放的字符串。所以在使用string对象的时候,无需思考底层的char*指针!
char ch = 'h';
char *g = &ch;
cout<<g<<endl;//输出char*型指针,可能崩溃!
但是如果输出指向char *类型的指针呢?
答案是会正常输出指针!
具体分析见:
const char *p[] = {"Hello","jhafjd"};
//等价于const char *(p[2]) = {"Hello","jhafjd"};
//p会转换为指针,指向const char*类型
cout<<p[1]<<endl;//输出jhafjd
cout<<p<<endl;//输出地址0x6ffe30
char d[][8] = {"Hello","kjhd"};
//d会转换为char (*)[8]类型的指针
//*d是char[8]类型的数组,因此会转换为char*类型的指针
cout<<*d<<endl;//输出Hello,等价于d[0]
cout<<*(d+1)<<d[1]<<endl;//输出kjhd,等价于d[1]
const char *p[] = {"Hello","jhafjd"};
//等价于const char *p[2] = {"Hello","jhafjd"};
//p会转换为指针,指向const char*类型,即p的类型是
//const char**
//注意,这里的存储方式和上面的d不一样,p是一个数组,存了两个地址,数组只占连续的两块内存,但是两个地址是零散的。即,字面量"Hello"和"jhafjd"是两块不同的内存!
//d是数组的数组,而且它的两个字符串是存在连续的内存空间的,只不过都有"空隙",因为每个字面量都是char [8]类型的数组!
cout<<p[1]<<endl;//输出jhafjd
char (*pp)[8] = d;//因为d会被转换为char (*)[8]类型
//所以可以给pp初始化