一个指针变量占几个字节呢?定义指针的基类型又有什么用呢?

我们都知道普通变量的空间大小和修饰它的数据类型有关,如:
char 占1个字节
int 占4个字节
float 占4个字节
double 占8个字节
在这里插入图片描述
那假如用来定义指针类型变量呢?
char*
int*
float*
double*
各占几个字节呢?答案如下:
在这里插入图片描述
对的。都占4个字节。因为指针变量所占空间大小和修饰他的数据类型没关系。只和系统的位数有关系,比如你是16位的那即是2个字节,是32位的那就是4个字节,64位的就是8个字节。也就是说你要理解”指针就是地址,地址就是指针。 而地址是内存单元的编号,内存单元编号有多长是固定的,是由你的系统决定的“。

那有小伙伴可能就要说了,现在电脑不都是64位的吗,为什么我编译出来的结果是4个字节,而不是8个字节呢?

那是因为我的编译器是32位的。
在这里插入图片描述
改用64位的编译器,那结果如下:
在这里插入图片描述
到这里,小伙伴们可能又疑惑了,那定义指针变量时它的数据类型,这里应该说基类型到底有何作用呢?

答案是,定义指针变量时基类型是代表该指针变量所指向的变量所占的字节数。
比如你定义了 int a = 100;然后你要定义一个指针p指向a,那你就只能定义int* 类型的指针,而不是char*、float*、double*等等的类型,只能是: int *p = &a;
具体编译结果如下:
在这里插入图片描述
在这里插入图片描述
虽然说C++的编译器不会让你通过,但是假如你就是要指针的指向类型和存放的数据类型不一样,那你就会出现下面这种指针存储的数据不完整的情况。为什么会这样呢?上面我们说到,每个数据的内存单元是固定的,32位系统那就是4个字节。但是指针指向这个数据的时候,只会指向这个存储地址的首地址,而一个存储单元只能放一个字节的数据,那对于int,short,float等类型,你就只能丢失后面部分的数据了。
在这里插入图片描述

可能这样还不好理解定义的基类型有什么作用,下面再看一个案例:

在这里插入图片描述
可以发现:
第一个地址与第二个地址的值相差4,第二个与第三个地址的值相差12.

不难看出:
对指针加N,指针前进“当前指针指向的数据类型的长度×N”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_44850779

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值