如图,关于char* 以及 char数组的问题,求指点

1,我定义了char *Pstr,这个Pstr明显是个指针,为何输出coutf<<Pstr<<endl;结果不是地址,而是整个字符串??
2,当后面使用int的时候cout<<arr<<endl;结果却是地址????结合1和2两问题,int和char在这里有何不同??
3,我想用sizeof()求“hello”的大小,怎么求?
4,定义char str[]={'a','b','c','d','e','f','g','\0'}数组的时候,cout<<str<<endl;为何结果是整个字符串?不是地址???










一只甜甜圈
浏览 86回答 3
3回答

侃侃尔雅

运算符重载可以做任何事情,没有任何规则所只要是地址打印出就是地址。而且char*是特殊的,从来没有在哪输出过地址运算符重载,不是int/char不同,而是重载后int*和char*不同sizeof("hello"),这是唯一的办法,赋值给指针后只能用strlen,不能用sizeof同样,不要总想着参数是地址,输出也是地址,如果这样,高级语言就太无用了

肥皂起泡泡

1.因为 iostream内部 cin cout 对char* 做了特殊处理.......因为c/c++ 输入输出字符串通常要用到char*如果直接输出地址,就要用别的方法来输出字符串了 就不方便了.....所以直接输出地址 那里放着的字符串......3、sizeof("hello");得到 字符串实际长度 + \0 占的一个字节一般用strlen函数.......同 1、2,str数组名 是 char* 地址

小唯快跑啊

1、这是cout(const char *)函数的定义。为方便处理字符串。2、字符串是数组,int只是一个数;3、include <string.h>4、同1.
打开App,查看更多内容
随时随地看视频慕课网APP