cout 输出数组名和字符数组名/ 输出地址,cout对字符数组重载

 

  1. char a[] = {'a','b','c'};

  2. char b[] = "abc";

  3. char c[] = { 'a','b','c','\0'};

  4. int d[] = {1,2,3 };

  5. cout << a << endl;

  6. cout << b << endl;

  7. cout << c << endl;

  8. cout << d << endl;

结果:

分析:

1.以字符串字面量初始化的字符数组cout数组名可以输出整个数组;

2.列表初始化的字符数组必须加上字符串结束符‘\0’才能cout数组名才能正确输出整个数组

3.列表初始化的字符数组没加加‘\0’的话,可以看见字符数组打印出来了,但是后面多了几个字符,因为cout不知道什么时候结束

4.而其他类型的数组,比如int,cout数组名输出的是这个数组的16进制地址,后面会验证这一点。

为什么会出现这种情况呢?不是说数组名代表数组的首地址吗?

因为cout对于cha[]重载了<<运算符呗。

另外强调一点,数组b和c的长度都是4字节。

 

那么我们怎么输出char数组的首地址呢,用printf:

 
  1. printf("%p \n", c);

  2. printf("%p \n",d);

也可以这样:

printf("%p \n", &d[0]);

%p表示以16进制的形式输出。

数组d的地址怎么跟上面不一样,因为这是运行两次的截图。。

--------------------------------------------------

以后遍历数组可以多使用范围for循环,自动检测,节省时间,比如输出上面定义的数组d:

 
  1. for (auto v: d) {

  2. cout << v << " ";

  3. }

  4. cout << endl;

注:这是C++11新特性,vs2010不支持的,我用的vs2015.

  • 8
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值