C++指针、数组和指针算术

在C++中,指针和数组基本等价,原因在于指针算术(pointer arithmetic)和C++内部处理数组的方式。
指针算术中,指针变量+1后,增加的量等于它指向的类型的字节数。在多数情况下,C++将数组名解释为数组第1个元素的地址。

int* stack = {1, 2, 3};

要注意以下两点:

  • stack[1] == *(stack + 1),C++会将数组名的表达式转化为指针的表达式
  • stack == &stack[0] ,数组名被解释为数组第一个元素的地址

指针和字符串

观察如下代码:

char flower[10[ = "rose";
cout << flower << "s are red.\n";

上述程序会打印出字符串数组,这里 cout 传入的是 flower —— 字符串数组名,即字符数组第一个元素 r 的地址,**cout 对象认为 char 的地址是字符串的地址,因此它打印该地址处的字符,然后继续打印后面的字符,直到遇到空字符。**这个逻辑和c++将数组名当作指针处理的逻辑是闭环的,很妙。并且用引号括起来的字符串像数组名一样,也是第一个元素的地址。上述代码不会将整个字符串发送给 cout。二指示发送该字符串的地址,这意味着对于数组中的字符串、用引号括起来的字符串常量以及指针所描述的字符串,处理的方式是一样的,都传递他们的地址,与逐个传递字符串中的所有字符相比,这样做的工作量确实很少。
在 cout 和多数 c++表达式中,char 数组名,char指针以及用括号括起来的字符串常量都被解释为字符串第一个字符的地址。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值