我今天阅读《C++ Primer Plus第六版》,认为原书中第90页的讲解数组的地址的一小部分不够详细易懂。
原书中提到了两个地址的概念,并且输出tell和输出&tell所展示的内容是一样的,我想这会令一些人感到迷惑。
因此写下这篇文章。
原书内容:
本人讲解:
- tell 是一个数组(也是指针),指向数组中第一个元素的位置
- &tell 是一个指针,指向了数组所在的位置
- *&tell 与tell等价,对 &tell 这一指针解引用,获取到了数组本身。
体现差异的代码
运行下方代码,你会通过sizeof函数发现数组和指针两种变量的差异。
#include<bits/stdc++.h>
using namespace std;
int main()
{
short tell[10];
cout <<sizeof( tell) << " " << tell<<endl; // displays &tell[0]
cout <<sizeof( &tell )<< " " << &tell<<endl; // displays address of whole array
cout <<sizeof(*&tell )<< " " << *&tell<<endl; // get the address of whole array
return 0;
}
代码输出
你会发现,虽然 tell 和 &tell 在cout之后所展现的是一样的地址,
但是对它们使用sizeof函数后,tell 得到的是20,&tell 得到的是8。
展现的地址是一样的原因是:数组的第一个元素的地址 == 数组本身所在的地址
这里的 sizeof 出来的差别在于 tell 是数组变量,&tell 是指针变量,尽管它们cout出来的内容相同,但是变量类型不同。
结束
有任何问题,请联系编者。