数组的地址(C++ primer plus上这一段是书上错了还是我错了?)

        蓝色字体为差异部分。

 

      对数组取地址时,数组名也不会被解释为其地址。等下,数组名难道不被解释为数字的地址吗?

不完全如此:数组名被解释为第一个元素的地址,而对数组名应用地址运算符时,得到的是整个数组的地址:

 

     short tell[10];

     cout << tell << endl; 

     cout << &tell << endl;

        从数字上说,这两个地址相同;但从概念上说&tell[0](即tell)是一个2字节内存块的地址,而&tell是一个20字节内存块的地址。因此表达式tell+1 将地址值加2,而表达式&tell+ 1 将地址加上20。换句话说,tell是一个short指针(*short),而&tell是一个这样的指针,即指向包含10个元素的short数组(short(*)[10])

        c您可能会问,前面有关&tell的类型描述是如何来的呢?首先,您可以这样声明和初始化这种指针:

    short (*pas)[10] = &tell;

        如果省略括号,优先级规则将使得pas先与[10]结合,导致pas是一个short指针数组,它包含10个元素,

一次括号是必不可少的。其次,如果要描述变量的类型,可将生命中的变量名删除。因此,pas的类型为short(*)[10]

另外,由于pas被设置为&tell,因此*pas与tell等价,所以(*pas)[0]为数字的第一个元素。

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值