(作业)输出变量存储字节的内容及每个字节对应的地址

本文介绍了一种使用C语言程序的方法,通过该方法可以获取指定变量在内存中存储的每个字节的内容及其地址。文章提供了详细的代码示例,并解释了如何通过强制类型转换为char指针来逐字节地访问整型变量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

例:有以下变量:x 为 float型,y为in型, s 为 short, 请用C语言程序实现:可输入对应的变量值,输出其在内存中存储的每个字节的内容。比如,x=-12.5, 输出对应存储4字节内容及每个字节对应的地址。


刚看题目可能有点晕,但把题目多读几遍后,即明白若变量int x=127,则先找出x由几个字节所存储,比如4,再并找到x的存储头地址,对应依次输出x所有字节所指向(存储)的内容。

······

初学者的话是不是还有点晕?没事,先直接上代码

我们以int x=127为例,在C语言中实现。

#include<stdio.h>

int main()
{
	int x;
	char *c;
	x=127;
	c=(char*)&x;
	for(int i=0;i<sizeof(x);i++)
	{
		printf("%x \t %x \n",(c+i),*(c+i));
	}
	return 0;
}


这里再多补充解释一句,如何输出对应存储4字节内容及每个字节对应的地址?先找到第一个字节的头地址,然后依次++输出相对应的地址和该字节存储的内容。

下面来对可能有疑惑的几个点一一解释

1.

c=(char*)&x;

这句话是什么意思?

先取x的首地址,然后强制转换为char指针类型。本质上还是把x的地址给c,只不过现在的类型是char而不是int。

那为什么要转换为char呢?直接用int不好吗?

这就涉及到接下来要进行的步骤了,且看。

2.

printf("%x \t %x \n",(c+i),*(c+i));

这里(c+i)输出的是地址。*(c+i)输出的是该地址所存储的数。

我们可以看到他们两个都有+号,而这里的+后代表的是,地址加后变为下一个该类型数据所存放的地址,而不是只把字节或者说地址+1。

这是因为对int来说,如果原来的地址是abc123,那么+1后则变为abc127。(原本的一个int型数据就要占4个字节即abc123,abc124,abc125,abc126)。

现在知道为什么1中要强制转换为char型了吧?因为一个char型数据占一个字节,若要依次输出每个字节的内容,当然+1后要让地址仅仅+1。如果原来的地址是abc123,对char来说,+1就真的是变成abc124。



评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值