文章目录
2024.04.16
1、*****system函数
需要头文件#include <stdlib.h>
作用是在一个子进程中运行shell命令
2、*****gcc编译过程:预处理,编译,汇编,链接
第一步预处理:宏定义展开,头文件展开,条件编译,删除注释。不做语法检查。(详见main.i)
第二步编译:检查语法,将预处理后的文件编译成汇编文件
第三步汇编:将汇编文件生成目标文件(二进制文件)
第四步链接:把库链接到可执行程序中去,生成可执行文件
gcc -E main.c -o main.i
gcc -S main.i -o main.s
gcc -c main.s -o main.o
gcc main.o -o main.out
3、寄存器、缓存、内存三者的关系
从远近看:cpu《--》寄存器《--》缓存《--》内存 ----硬件
4、数据类型
作用:编译器预算对象分配的内存空间大小
2024.04.17
*****变量 与 常量
const修饰的变量称为 常变量
常量:
是只读的固定值,在程序运行期间不会改变,不能被程序修改的量,可以是任意类型
一般出现在表达式货赋值语句中
分为整型常量、实型常量、字符型常量、字符串常量
两种定义常量的方式:
----使用 #define 宏定义:#define 常量名 值
----使用const关键字:const 数据类型 常量名 = 值
分类:
----字面常量:
直接出现在代码中的数值,例如整数、浮点数、字符或字符串,不需要声明,如 42、3.14、‘A’、“Hello”。
----使用const关键字的常量:
通过 const 关键字声明的具有常量特性的变量,使其值不可修改,如 const int MAX_VALUE = 100。
----符号常量:
通过 #define 预处理指令定义的标识符,用于表示一个固定值,提高代码的可读性和可维护性
----枚举常量:
通过 enum 关键字定义的一组常量,它们通常表示相关的命名值。
2024.04.19
变量:
在程序运行期间可以改变
数据类型:可以理解为创建变量的模具: 固定大小内存的别名;
----基本类型----整型:short、int、long、long long(占用空间大小:short<=int<=long<long long)
字符型:char
实型(浮点型):float、double
sizeof:
不是函数,不需要包含任何头文件,功能是计算一个数据类型的大小,单位是字节,
返回的占用空间大小是为这个变量开辟的大小
返回类型是unsigned int/ unsigned long
数组名只有在
*sizeof 运算符
*取址 & 运算符
*字符串常量初始化的数组 Str[]=“abcdef”
这三种情况下不会发生退化(array decay)
其余情况下调用数组名,都会退化成指向数组首地址的指针
在c语言中,数组名在函数的调用中退化成了一个指针,对函数的参数使用Sizeof,sizeof获取的结果就是指针的大小,而不是数组本身的大小
指针的sizeof
指针是用来记录另一个对象的地址,所以指针的内存大小就等于计算机内部地址总线的宽度。
对一个地址来取大小呢,如果是32位系统的话即为4,如果是64位系统的话为8,
所以呢,在函数中sizeof获取的是指针的长度而不是数组的长度
指针变量的sizeof值与指针所指的对象没有任何关系
整型:
有符号和无符号整型取值范围:
数据类型 占用空间 取值范围
short 2 字节 -32768 到 32767 (-2^15 ~ 2^15-1)
int 4 字节 -2147483648 到 2147483647 (-2^31 ~ 2^31-1)
long 4/8 字节 -2147483648 到 2147483647 (-2^31 ~ 2^31-1)
unsigned short 2 字节 0 到 65535 (0 ~ 2^16-1)
unsigned int 4 字节 0 到 4294967295 (0 ~ 2^32-1)
unsigned long 4 字节 0 到 4294967295 (0 ~ 2^32-1)
字符型:
char:
本质就是一个 1 字节大小的整型
在给字符型变量赋值时,需要用一对英文半角格式的单引号(' ')把字符括起来
字符变量实际上并不是把该字符本身放到变量的内存单元中去,而是将该字符对应的 ASCII 编码放到变量的存储单元中
重点记住:32(空格)开始,可以从键盘上找到。
ascii ’0‘对应48,’A‘对应65,’a‘对应97,大小写字母相差32
转义字符
浮点型:
double比float更精准,打印格式:%lf,%f
float的指数部分有8bit,有符号型最高位代表正负,对应的指数范围为-128~128,所以取值范围为:
-2^128到2^128,约等于-3.4E38 — +3.4E38
double占用8个字节(64位系统),的指数范围是-1023到1024,其取值范围为±1.7E+308到±1.7E-308
大小范围主要取决于指数所占的bit位数。精度取决于尾数位数
类型 符号位 指数位 尾数 有效位数
float 1bit 8bit 23bit log2(23)=7.22
double 1bit 11bit 52bit log2(52)=15.65
long double 1bit 15bit 64bit log2(63