0
点赞
收藏
分享

微信扫一扫

深度剖析数据在内存中的存储

1 数据类型详细介绍

1.1 内置类型

深度剖析数据在内存中的存储_数据

1.11 整形家族

整形家族:

深度剖析数据在内存中的存储_数据_02

当然还有long 和 longlong等。

1.12 浮点型家族:

     float(单精度) 和 double (双精度),他们也分有符号和无符号

1.2 自定义类型

1.21 数组类型

数组类型的类型名是除了数组名之外的其他部分:如,int arr[10];类型名是int [10]

int arr[10] = { 0 };//整形数组
char arr1[10] = { 0 };//z字符串数组
·········

1.22 结构体类型

如下面这个是结构体类型,他的类型是 sturct stu 

//创建一个学生的结构体类型
struct stu
{
int age;
char ID[20];
char name[20];
char tele[20];
}s1;

1.23 枚举类型和联合类型

枚举类型的关键字是 enum; 联合类型的关键字是 union;

//枚举类型
enum sex { MALE, FEMALE};

1.3 指针类型

指针类型有很多:

如:

一级指针:  

int * pi;
char * pc;
float * pf;
void * pv;

除了这些,还有很多其他的,但这里我想重点说一下void * pv ;

void * ;类型的指针,可以接受任意类型的地址,但是对于void *类型的指针 ——> 不能进行解引用操作,同时也不能进行指针的“+,-”整数操作:均是因为不知道访问多少个字节。

二级指针

二级指针是存放一级指针地址的。

int* * ppi = π//pi是一级指针

数组指针

     存放数组地址的指针。

指针名是parr,指针指向的对象是 int [10],这个对象是一个整形数组,数组有10个元素。
int (* parr)[10];

函数指针

       存放函数地址的指针、

#define _CRT_SECURE_NO_WARNINGS    
#include<stdio.h>
int Add(int x, int y)
{
return x + y;
}
int main()
{
int a = 10;
int b = 20;
//函数指针,第一个 int是函数的返回类型,括号里面的两个int,是函数的参数类型
int (*pa)(int, int) = &Add;
//(*pa)(10, 20)是调用函数指针,也可以写成pa(10,20);
printf("%d",(*pa)(10,20));

return 0;
}

1.4  空类型

void 表示空类型(无类型),一般是用在函数的返回值

//第一个void 表示无返回值,第二个void 表示没有参数
void print(void)
{
printf("hehe\n");
}

变量的创建是要开辟空间,空间的大小是根据不同的类型决定的

2 整形在内存中的存储:源码,反码,补码

2.1 整形数据的存放

对于整形来说:数据存储到内存中是以二进制补码的表示形式储存

原因:

  1. 保证了0的唯一性,保证了数的表示的准确性。
  2. 让加减可以统一处理,优化了数的运算过程。
  3. 解决了自身逻辑意义的完整性。

cpu只有加法器,所有的加法,减法是统一处理的。使用补码,可以将符号位和数值域统一处理;此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。

整形数据的打印是以源码的形式转到十进制打印的。

2.2 源码,反码,补码

对于有符号数 最高位表示符号位 : 0 ——> 正, 1  ——> 负深度剖析数据在内存中的存储_字节序_03

对于无符号数,最高位表示数值,所以源码,反码,补码都相同

       

3 大小端字节序介绍及判断

3.1 数据在vs编译器内存中是倒着存

深度剖析数据在内存中的存储_补码_04

按照正常情况 a在内存中是以11 22 33 44 的顺序存储,但是在VS内存中却是以44 33 22 11存储。

3.2  大端/小端字节序存储模式的介绍

大端字节序存储:是指数据的低位字节序内容存放在内存的高地址中;而数据的高位字节序内容存放在内存的低地址中。

小端字节序存储:是指数据的低位字节序内容存放在内存的低地址中;而数据的高位字节序内容存放在内存的高地址中。

深度剖析数据在内存中的存储_字节序_05


举报

相关推荐

0 条评论