C语言知识整理(四)

来源:互联网 发布:猎奇鉴定中心 知乎 编辑:程序博客网 时间:2024/06/05 03:58

一、数据在内存中的存储
1.类型决定我们看待这块内存的视角以及内存为其分配的大小
2.构造类型:结构体、共用体(联合体)、枚举、数组类型
3.指针类型:用来存放地址
空类型:void*,此种类型不可以进行解引用,也不可进行自加和自减,通用类型的指针,
4.整型在内存中的存储:数据在内存中,以二进制补码的形式存在(可以将符号位参与运算)。(CPU中只有加法)
5.大小端:
这里写图片描述

5.强制类型转换,有可能不会改变其值
6.浮点型在内存中的存储 以二进制序列存储(科学计数法)
浮点数表示形式:3.14159,1E10=1.0*10^(-10)
浮点型数据在内存中的存储:
1)根据国际标准IEEE(电气和电子工程协会)754,任意一个二进制浮点数可以表示成下面的形式:
(-1)^S * M * 2 * E
(-1)^S表示符号位,当S=0,则为正数,当S=1,则为负数。
M表示有效数字,大于等于1,小于2。
2^E表示指数位。
2)IEEE 754规定:
对于32位的浮点数,最高的1位是符号位S,接着的8位是指数E,剩下的23位为有效数字M.
对于64位的浮点数,最高的1位是符号位S,接着的11位是指数E,剩下的52位为有效数字M。
注:浮点数不能把所有数字精确表示,M:存储小数点后面的数字,E:表示无符号的数。
首先:E为一个无符号整数
这就意味着,如果E为8位它的取值范围为0~255;如果E为11位,它的取值范围为0~2047。但是,我们知道,科学计数法中的E可以出现负数,所以IEEE 754规定,存入内存时E的真实值必须在加上一个中间数,对于8位的E,中间数是127,对于11位的E,这个中间数为1023.例如2^10的E 是10,所以保存成32位浮点数时,必须保存成10+127=137,即10001001。
还原过程
E分为三种情况:
a E不全为0或者1
指数E的计算值减去127(或1023),得到真实值,再将有效数字M前加上第一位的1。
b E全为0
这时,浮点数的指数E等于1-127(或者1-1023)即为真实值,表示正负零,以及接近0的很小的数字。
c E全为1
表示无穷大

float a=5.5//101//1.011*2^2             二进制序列//S=0 M=1.011 E=2

C/C++在内存中的分配
这里写图片描述

7.变量的存储位置:普通内存,运行时堆栈(为运行函数的调用所开辟的空间 即栈区(内存)),硬件寄存器(register 建议编译器将变量存储在寄存器中)
8.在代码块之外声明的变量在静态区
在代码块内部声明的变量,存储于栈区存储类型由自动
在代码块内部声明的变量,加上static,存储类型由自动变为静态
9.变量的初始化
全局变量与静态变量不初始化,则结果为0;局部变量不初始化,则结果为随机值

二、指针
1.指针在32位平台下是4个字节,在64位平台下为8个字节。
2.指针的运算:指针加减整数
指针减指针:减去的结果是中间元素的个数(两个 指针变量指向同一个 数组的元素)
指针的关系运算:比较,利用地址之间的比较(如果两个指针变量指向同一个数组的元素,则可以进行比较。指向前面元素的 指针变量小于指向后面元素的指针变量。)
指针的解引用:.int 解引用访问四个字节, char解引用访问一个字节
3.二级指针:存放一级指针的地址
4.地址,指针解引用不能作为左值,左值为空间,右值便是内容 (但不是所有的空间都可以作为左值)
5.int (*arr[5])[3] arr是一个有5个元素的数组,每个元素又是一个指针,这个指针有能力指向3个整型的数组。
6.二维数组在传参的时候,利用数组指针
7.回调函数:回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。
8.利用回调函数,可以实现qsort(快速排序)采用冒泡排序的方法
在#include

void qsort( void *base, size_t num,(元素个数) size_t width,(每个元素的大小) int (__cdecl *compare )(const void *elem1, const void *elem2 ) );  compare( (void *) elem1, (void *) elem2 );

9.对结构体指针+1,向后偏移一个结构。将结构体指针强制类型转换为为符号的整型,对其+1表示加上数字1。将结构体指针强制类型转换为一个指针,对其+1表示加上一个数据类型的大小。例如强制类型转换为 (int * )p+1:表示加上4个字节,(char*)p+1:表示加上1个字节。

原创粉丝点击