理清C++数组变量和指针变量所带来的迷惑

文章分析了《C++PrimerPlus》中关于数组地址的讲解,指出tell和&tell虽显示相同地址,但sizeof操作揭示了数组变量tell与指针变量&tell的不同。通过代码实例解释了两者类型的区别。
摘要由CSDN通过智能技术生成

我今天阅读《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出来的内容相同,但是变量类型不同

结束

有任何问题,请联系编者。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值