【C语言学习-实用调试技巧】使用vs2019使用调试使用内存窗口查看数据存储的显示问题

使用vs2019使用调试使用内存窗口查看数据存储的显示问题


int main()
{
	int arr[10] = { 0 };
	int i = 0;

	int sz = sizeof(arr) / sizeof(arr[0]);
	for ( i = 0; i < sz; i++)
	{
		arr[i] = i + 1;

	}

	for ( i = 0; i < sz; i++)
	{
		printf("%d\n", arr[i]);
	}
}

这段代码例如当我将arr[0]赋值为1时,使用调试窗口查看内存发现存储的是这样的形式,如下图所示。



可以看到数组首元素地址为0x007FFDA4,存储的值为01 00 00 00,那为什么这样一个整型用四个字节存储起来会是01 00 00 00这样的形式呢?

原因如下:

① 在内存中,数据存储通常是以字节为单位的,具体如何存储取决于计算机的体系结构和编程语言的数据类型。在典型的小端序计算机体系结构中,较低地址存储了整数的最低有效字节(最低位),而较高地址存储了整数的最高有效字节(最高位)。

        小端序(Little-Endian)计算机体系结构:01 00 00 00

        大端序(Big-Endian)计算机体系结构:00 00 00 01

由此可见vs2019采用的是小端序的计算机体系结构

② 每个字节由两个十六进制数字表示。这是因为在典型的计算机体系结构中,整数通常占据四个字节(32位),每个字节由两个十六进制数字表示。

        第一个字节(01)包含整数的最低有效位。

        第二个字节(00)包含整数的次低有效位。

        第三个字节(00)包含整数的次高有效位。

        第四个字节(00)包含整数的最高有效位。

③ 众所周知,8个bit位表示一个字节,每个字节由两个十六进制数字表示,这两个数字分别表示字节中的不同的四位二进制位。在十六进制表示中,每个十六进制数字对应四位二进制数。

以 "01" 为例:

        第一个十六进制数字 "0" 对应四位二进制数 "0000"。

        第二个十六进制数字 "1" 对应四位二进制数 "0001"

所以这两个十六进制位所表示出来的数字01就需要8个bit位,所以就是一个字节。这有4组,那就是四个字节。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值