临平建设局网站,wordpress谷歌广告代码,wordpress首页被篡改,如何下载ppt免费模板C语言基础阶段一、C语言关键字1. static#xff08;静态修饰符#xff09;两种用法#xff1a;// 1. 限制全局变量和函数的作用域#xff08;只能在当前文件使用#xff09; static int global_var 10; // 只能在当前文件访问 static void func(void) { // 只能在当…C语言基础阶段一、C语言关键字1. static静态修饰符两种用法// 1. 限制全局变量和函数的作用域只能在当前文件使用 static int global_var 10; // 只能在当前文件访问 static void func(void) { // 只能在当前文件调用 // ... } // 2. 延长局部变量的生命周期只会初始化一次 void test(void) { static int count 0; // 只在第一次调用时初始化为0 count; // 每次调用count都会保持上次的值 printf(%d\n, count); } // 调用test()三次的输出 // 第一次: 1 // 第二次: 2 // 第三次: 32. extern外部声明作用声明一个外部符号函数/全局变量可以在本文件中使用// file1.c int global_value 100; // 定义全局变量 // file2.c extern int global_value; // 声明外部变量告诉编译器在别的文件中 extern void external_func(void); // 声明外部函数 void test(void) { printf(%d\n, global_value); // 可以使用file1.c中的变量 }3. const常量修饰符作用修饰符号为只读99%情况下指的是变量const int MAX_SIZE 100; // MAX_SIZE是只读的 // MAX_SIZE 200; // 错误不能修改const变量 // 指针相关的const const char *p1; // p1指向的内容是常量不能通过p1修改 char * const p2; // p2本身是常量不能修改p2指向的地址 const char * const p3; // p3和它指向的内容都是常量4. volatile易失性修饰符作用每次都从内存地址中访问数据防止编译器优化volatile int flag 0; // 告诉编译器不要优化这个变量 // 常用于 // 1. 多线程共享的变量 // 2. 硬件寄存器 // 3. 中断服务程序修改的变量二、数组、指针、函数1. 指针相关概念// 基本指针 int a 10; int *p a; // p是指向int的指针 // 函数指针指向函数的指针 int (*pfun)(int); // pfun指向返回int参数为int的函数 // 对应的函数int func(int a); // 指针函数返回值类型为指针的函数 int *func(int a); // func函数返回int指针 // 数组指针指向数组的指针 int (*parr)[10]; // parr指向包含10个int的数组 // 对应的数组int arr[10]; // 指针数组元素类型为指针的数组 int *arr[10]; // arr是包含10个int指针的数组 // 函数指针数组元素类型为函数指针的数组 int (*func_arr[10])(int); // 包含10个函数指针的数组三、结构体和内存对齐1. 结构体定义// 定义一个新类型 struct Student { char name[20]; int age; float score; }; // 使用 struct Student stu1; stu1.age 20; // 或者使用typedef typedef struct { char name[20]; int age; } Person; Person p1; // 可以直接使用2. 内存对齐// 设置内存对齐方式 #pragma pack(1) // 按1字节对齐 struct Test1 { char a; int b; }; // 大小为5字节 #pragma pack(4) // 按4字节对齐默认 struct Test2 { char a; int b; }; // 大小为8字节有3字节填充 // Linux中的对齐方式 struct Test3 { char a; int b; } __attribute__((packed)); // 按1字节对齐3. 共用体联合体union Data { int i; float f; char str[20]; }; // 所有成员共用同一段内存 // 大小为最大成员的大小20字节四、预处理和宏定义1. 宏定义// 简单宏 #define PI 3.14159 // 带参宏 #define MAX(a, b) ((a) (b) ? (a) : (b)) #define SQUARE(x) ((x) * (x)) // 使用 int max_val MAX(10, 20); int square_val SQUARE(5); // ((5) * (5))2. 条件编译// 基本条件编译 #if 1 // 这部分代码会被编译 #else // 这部分不会 #endif // 防止头文件重复包含 #ifndef MY_HEADER_H #define MY_HEADER_H // 头文件内容 #endif // 根据平台编译 #ifdef LINUX // Linux专用代码 #elif defined(WINDOWS) // Windows专用代码 #endif五、C语言编译过程4个阶段main.c → main.i → main.s → main.o → mainapp(bin) ↓ ↓ ↓ ↓ ↓ 源代码 预处理后 汇编代码 目标文件 可执行程序1. 预处理Preprocessing处理内容去掉注释宏替换头文件展开特殊符号处理// main.c 中的代码 printf(%s %d i %d\n, __FILE__, __LINE__, i); // 预处理后变成假设在test.c第5行 printf(test.c 5 i %d\n, i);生成文件.i文件符合C语法的纯文本文件2. 编译Compilation作用C语言源文件转换为汇编文件进行C语言的语法分析检查语法错误生成中间代码生成文件.s文件汇编文件3. 汇编Assembly作用汇编程序转换为二进制机器码将汇编指令转换为机器指令生成可重定位的目标文件生成文件.o文件目标文件二进制机器码4. 链接Linking作用将所有.o文件链接为可执行程序解决符号引用函数调用、变量引用合并各个模块添加启动代码生成文件可执行二进制文件注意1-3阶段每个.c文件独立处理n个.c文件会生成n个.o文件六、文件编程1. 两种IO接口// 标准IO有缓冲区效率高 #include stdio.h FILE *fp fopen(file.txt, r); fread(buffer, 1, size, fp); fclose(fp); // 系统IO无缓冲区效率低仅Linux #include sys/types.h #include sys/stat.h #include fcntl.h #include unistd.h int fd open(file.txt, O_RDONLY); read(fd, buffer, size); close(fd);2. 缓冲类型无缓冲立即读写如系统IO行缓冲遇到换行符或缓冲区满时刷新如终端输出全缓冲缓冲区满时刷新如文件操作3. 性能测试// 测试磁盘IO效率 // 方法1每次写1字节写1000次效率最低 // 方法2每次写100字节写1000次效率中等 // 方法3每次写1000字节写1次效率最高 // 文件空洞文件中间有未写入数据的部分 lseek(fd, 1024, SEEK_SET); // 跳到1024字节位置 write(fd, data, 4); // 创建文件空洞七、进程与线程1. 进程空间布局4GB0xFFFFFFFF (4GB) ┌─────────────────┐ │ Kernel │ │ (内核空间) │ 0xC0000000 (3GB) ├─────────────────┤ ← 内核空间与用户空间分界线 │ │ │ Stack │ ← 线程独享每个线程有自己的栈 │ (栈) │ ├─────────────────┤ │ Memory Map │ ← 库函数地址映射区 │ (映射) │ ├─────────────────┤ │ Heap │ ← 动态分配内存需要手动管理 │ (堆) │ ├─────────────────┤ │ BSS │ ← 未初始化的全局/静态变量 │ │ ├─────────────────┤ │ Data │ ← 初始化的全局/静态变量 │ (数据段) │ ├─────────────────┤ │ Code │ ← 程序代码二进制指令 │ (代码段) │ 0x00000000 (0GB) └─────────────────┘2. 各段说明Code段存储程序二进制代码只读Data段存储初始化为非0的全局变量和静态变量BSS段存储未初始化或初始化为0的全局变量和静态变量Heap段用户自行管理的动态内存malloc/freeStack段线程独享存储局部变量、函数参数、返回地址Map段存储共享库函数的地址映射Kernel段内核空间用户程序不能直接访问3. 进程 vs 线程特性进程线程空间大小4GB用户空间3GB共享进程空间栈每个进程有自己的栈每个线程有独立栈8MB创建效率低需要复制资源高共享资源通信复杂度复杂需要IPC机制简单共享内存稳定性高相互隔离低相互影响资源开销大小九、网络基础1. 网络模型对比OSI七层模型 TCP/IP四层模型 7. 应用层 应用层 6. 表示层 5. 会话层 4. 传输层 传输层 3. 网络层 网络层 2. 数据链路层 网络接口层 1. 物理层2. TCP vs UDP特性TCPUDP连接有连接无连接通信模式一对一一对多/多对多数据传输数据流数据报包可靠性高有应答机制低效率低高特性拥塞控制、重传机制无控制机制3. 数据包封装过程应用层数据 ↓ ---------------- | TCP/UDP头部 | ← 传输层 ---------------- | IP头部 | ← 网络层 ---------------- | 以太网头部 | ← 链路层 | 以太网校验 | ---------------- 实际在以太网中传输的数据帧4. 各层头部关键字段IP头部网络层32位源IP地址32位目的IP地址8位协议类型TCP6, UDP1716位总长度TCP头部传输层16位源端口16位目的端口32位序列号数据包序号32位确认号应答序号6位标志位SYN、ACK、FIN等16位窗口大小接收端缓冲区大小以太网头部链路层6字节目的MAC地址6字节源MAC地址2字节类型0800IP, 0806ARP46-1500字节数据4字节CRC校验