数据在内存中的存储,它来了!!

本文详细介绍了整数在内存中的存储方式,包括小端字节序和大端字节序的概念,并通过实例展示了内存查看工具的使用。此外,还探讨了原码、反码和补码的关系,以及字符指针的两种含义。最后,讲解了指针数组和数组指针的区别,帮助读者深入理解C语言中的指针操作。
摘要由CSDN通过智能技术生成

整数在内存中的存储

借助调试器,我们可以看到内存中的情况,下面举一个简单的例子来说明:

int main(){
	int a = 10;
	system("pause");
	return 0;
}

在这里插入图片描述

我们首先写了一个int a ,然后我们可以打开我们的调试器(调试—窗口—内存)就可以看到下面这个图,在这个图的最上边是地址。

地址:想看哪个内存空间,就在这里输入地址就行了,可以直接输入取地址的表达式,让VS自动计算;

绿色框:当前的地址;

蓝色框:内存中的实际内容,按照十六进制表示的;

紫色框:表示一个字节,而此时的0a的地址就是0x003DFDD0,00的地址就是0x003DFDD1;

红色框:也就是每行的第一个,他们对应的地址就是左边的当前地址;

黄色框:把内存中的内容当成字符来理解;

char name[] = "hello";

同时我们可以看看字符的内存情况:

在这里插入图片描述

  我们可以看到右边字符框中有hello,他对应的内存中的情况为:68,65,6c,6c,6f,这就是hello这几个字符所对应的ASCII值。

字节序

  字节序,即字节在电脑中存放时的序列与输入(输出)时的序列是先到的在前还是后到的在前。(左高右低)

在这里插入图片描述

小端字节序

  所谓的小端模式(Little-endian),是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致。

在这里插入图片描述


在这里插入图片描述

大端字节序

  所谓的大端模式(Big-endian),是指数据的高字节,保存在内存的低地址中,而数据的低字节,保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;

原码

  原码是计算机机器数中最简单的一种形式,数值位就是真值的绝对值,CSDN符号位位“0”时表示正数,符号位为“1”时表示负数,原码又称带符号的绝对值。

反码

  反码通常是用来由原码求补码或者由补码求原码的过渡码。

补码

  补码是计算机把减法运算转化为加法运算的关键编码。补码存在的意义就是就是为了让硬件实现更简单。

三者之间的转换和简单运算

1.正整数的原码、反码、补码完全一样,即符号位固定为0,数值位相同。

2.负整数的符号位固定为1,由原码变为补码时,规则如下:

(1)原码符号位1不变,整数的每一位二进制数位求反,得到反码;

(2)反码符号位1不变,反码数值位最低位加1,得到补码。

在这里插入图片描述

  大部分计算机都是小端字节序,这里我们int a=-10,-10的原码就是上图的第一行,因为我们是小端字节序,所以把字节序颠倒过来就是-10的存储方式,它是按补码的方式存储的。而原码到补码就是原码取反+1就可以得到补码。

字符指针

含义

  C语言中的字符指针,有两种含义:
  1.指向一个字符;
  2.指向一个字符串。

在这里插入图片描述
  在上图中,p指向的是一个字符;而p2指向的是一个字符串(字符串是一个特殊的字符数组,以\0结尾),数组名可以转成首元素地址,则此时p2中保存的就是‘liujian’中的首元素‘l’的地址。

  知道了p2,就可以通过解引用和指针+1的运算,把字符串的每个内容都获取到,此时就当于使用p2来表示一个字符串了。

指针数组

是数组,每个元素是个指针。

* arr[4] =int { 0 };

数组指针

是指针,指向了一个数组。

	int arr2[4] = { 0 };
	int(*p)[4] = &arr2;

  数组名取地址,得到的是指向该数组的指针;直接使用数组名得到的是指向首元素的指针。

  ok ,文章就先到这里了,希望这篇文章能够帮助到你对指针的认识,若有不足或者不正之处,希望谅解并欢迎批评指正!

  如果本文章对你有帮助,哪怕一点点,那就请点一个赞呗,谢谢~~

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值