《C++ Primer Plus》中关于数组的地址,有个不懂的问题

在声明语句short tell[10];中,tell指向数组的首个元素,表示一个2字节内存块的地址,而&tell指向整个数组,表示一个20字节内存块的地址。到目前我是理解的,但后面有几个不理解的地方请大佬们指教:

  1. 书中说,表达式tell+1会将tell的值增加2,表达式&tell+2会将&tell的值增加20。不理解&tell+2为什么会将&tell的值增加20?&tell不是代表整个数组的地址吗,那&tell+2后&tell的值应该增加40才对啊,如果是&tell+1 其值才会增加20吧?
  2. 可以把 int * 理解为指向int的指针类型;但 short (*)[20] 该怎么理解?
阅读 2.5k
2 个回答

补充一下楼上的答案
short (*)[20] 就是 short [20]的指针,是一个数组指针

书上也许有错误的地方。你理解也有不准确的地方。其实你都可以自己实验得到。

tell单独用,指的是整个数组。但放入一些表达式中时,会被隐式转换为第一个元素的指针。

cout << sizeof(tell) << endl; // 输出20,即整个数组的大小
cout << sizeof(tell + 1) << endl; // 输出4或8,即一个指针的大小(32位或64位的指针大小不同)
cout << tell << endl; // 输出一个地址
cout << tell + 1 << endl; // 比上一个地址大2,即1个short的大小

&tell没有悬念,指的是指向整个数组的指针。

cout << &tell << endl; // 输出一个地址
cout << &tell + 2 << endl; // 比上一个地址大40

至于short (*)[20],没见过这样的写法。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题