c语言int的存储单元大小,c语言int *pInt=(int *)&d; 什么意思?

41fb9126d0bffe11de19f511040b3c9c.png

精慕HU

浮点数如何存放的已经有人回答了,我就不再多谈。我猜你要问的是,为什么要取地址,又转什么int *类型的指针,再按int去读这个数。首先,什么是指针?程序设计的老师给你讲的可能是,这个变量的存放位置。那么这个说法有错吗?没有。那么怎么去理解呢?计算机的程序在运行时都会被操作系统放入内存中,无论是程序代码、程序使用的变量和常量等等,都是在内存中的堆栈中。那么内存是什么?内存是一个按顺序编号的存储单元序列。比方说,如果我要将一个整形数(integer)存在内存中,那么它要占据4个存储单元(每个单元大小为一个字节,即8个比特位),所以我们说int长度是4。同样的,其他类型的数据也有对应的长度,比如说double类型数据长度为8。那么内存中不可能只放一个数据呀,放置多个数据之后,我怎么找到想要的变量位置呢?很容易想到的方法是,我记一下变量起始位置就可以了。比如说我记录一个双精度浮点数(double)类型数据,我只需要记录他起始位置(假设是12),那我从12开始往后读8个字节的内存单元,我就可以读出我想要的变量值了。那么,这个12是什么呢?这个12是变量位置,我们给他一个更优雅的名称:指针。接下来,指针本身只是一个地址,也就是只是一个数。既然是数,那么也必须是存放在内存中的——计算机不能存在寄存器里面啊。所以说指针也是一个变量,在默认情况下,它和其他变量也没有什么本质的不同。计算机只知道这里存了个数,它不会管是表示一个地址,或是人类所需要的存放位置。那么既然是存放位置,我们为什么还要去定义不同的指针类型呢?比方说我告诉你内存位置为12的地方存一个变量,那么怎么去读取这个变量的值呢?我是按4个字节还是8个字节去读呢?所以要显示地说明变量类型是什么(int还是double),所以这个指针的值为12,但是类型是int*还是double*还是要手动指定。但是不管是哪种类型的指针(哪怕是结构体类型的指针),它们长度都是一样的(int *的长度和double *长度一样)。所以我们可以强行把一个double*类型按照int*类型来读。举例说,我在内存空间12-19存放了一个double类型的数,但是我从12开始只读4个字节,把它理解为一个int,当然也是可以的。(这就是题目中这个语句的含义)所以结果为什么是0呢,我们只读了12-15这4个字节的存储内容,它和原来的长度为8的数也没有什么关系了(毕竟int和double存放方式不一样)。所以我们要先把double怎么存放在12-19搞明白,找到其中12-15存放的内容,然后再把这4个数“断章取义”地拼在一起当成一个整形数。(在这里,结果就是0了)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值