为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C C++
一只甜甜圈 2023-03-15 22:18:02
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;为何结果是整个字符串?不是地址???
查看完整描述

3 回答

?
侃侃尔雅

TA贡献1801条经验 获得超15个赞

  1. 运算符重载可以做任何事情,没有任何规则所只要是地址打印出就是地址。而且char*是特殊的,从来没有在哪输出过地址

  2. 运算符重载,不是int/char不同,而是重载后int*和char*不同

  3. sizeof("hello"),这是唯一的办法,赋值给指针后只能用strlen,不能用sizeof

  4. 同样,不要总想着参数是地址,输出也是地址,如果这样,高级语言就太无用了


查看完整回答
反对 回复 2023-03-18
?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

1.因为 iostream内部 cin cout 对char* 做了特殊处理.......因为c/c++ 输入输出字符串通常要用到char*
如果直接输出地址,就要用别的方法来输出字符串了 就不方便了.....所以直接输出地址 那里放着的字符串......

3、sizeof("hello");得到 字符串实际长度 + \0 占的一个字节
一般用strlen函数.......

同 1、2,str数组名 是 char* 地址

查看完整回答
反对 回复 2023-03-18
?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

1、这是cout(const char *)函数的定义。为方便处理字符串。
2、字符串是数组,int只是一个数;
3、include <string.h>
4、同1.

查看完整回答
反对 回复 2023-03-18
  • 3 回答
  • 0 关注
  • 81 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信