操作符计算:
~ : 按二进制取反,原位 1 变 0, 0 变 1;
在vs2022 x86(32位)版本下,运行下面这个程序系统会进入死循环。这是由于栈区内存的使用习惯是先使用高地址处的空间,再使用低地址处的空间,而数组内部随着下标的增长地址是由低到高变化的,如果 i 和 arr 之间有适当的空间,利用数组的越界操作就可能会覆盖到 i ,就可能会导致死循环的出现。
模仿strcpy的功能:
下面这个真的是惊艳到我了,绝。
完整版
还有升级版:
const修饰:
数据的存储:
char short int long (在32位中是4字节,在64位中是8字节) longlong float double
类型的意义:
1、使用这个类型开辟内存空间的大小(大小决定了使用范围)
2、如何看待内存空间的视角
整型家族:
char short int long longlong
对于上述五种,其都有 unsigned 和signed 之分,对于char 由于字符的本质是ASCII码值,是整型,所以划分到整型家族,但char 到底默认为 signed 还是 unsigned 标准是未定义,这取决于编译器,而对于剩下的四种,其默认都是 signed 型
构造类型:自定义类型,可以自己创建新的类型
数组类型 ,如 int arr [5] ; int [5] 就是我们自定义的类型,arr是数组名
结构体类型 : struct
枚举类型 : enum
联合类型 : union
指针类型:
int *pi; char *pc ; flaot *pf; void *pv;这个比较好奇,作用是什么?
空类型:
void 表示空类型/无类型,通常应用于函数的返回类型,函数的参数,指针类型。
整型在内存中的存储:
在计算机系统中,数值一律用补码来表示和存储,原因在于,使用补码,可以将符号位和数值域统一处理(运算时,直接进行运算,不在意其是否时符号位),同时,加法和减法也可以统一处理(cpu只有加法器),此外,补码和原码相互转换,其运算过程是相同的(补码取反加一就是原码,这一点还是蛮神奇的,发明补码的人真乃神人),不需要额外的硬件电路。
大小端介绍:
大端(字节序)存储模式:数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;
小端(字节序)存储模式:数据的低位保存在内存的低地址中,而数据的高位,保存在内存的高地址中;
大小端存储针对的是字节,对于字符型只有一个字节,也就没有大小端存储之分。
判断大小端: