
1符合前面条件直接停止。
#ifdef 宏名 语句块-#else 语句块-#endif(如果定义了宏明,执行语句块)
#ifndef 宏名 语句块-#else 语句块-#endif(如果没定义了宏明,执行语句块)
15.头文件包含:“.h文件名”可以包含函数声明、结构体、宏定义、全局变量声明。
防止头文件重复定义可用#ifndef _名_ #define _名_ 或者#pragma once
如果头文件和源文件不在一个目录下,要在头文件包含的时候加上相对路径或者绝对路径。并且在运行的时候gcc xx.c -o xx.h -I 头文件目录路径
16.查看预编译时文件:gcc xx.c -o xx.i -E
17.预定义宏:__FILE__(为两个下划线)__DATE__,__TIME__,__LINE__,__func__
18.构体对齐原则:
1、每一个成员按照自己的字节数对齐
2、最后总的字节数是最大对齐数的整倍,如果不是,加到第一个整数倍为止
3、结构体的对齐数就是最大成员的对齐数
4、如果有成员是数组,则按照每一个元素的大小对齐
ps : 成员按照从小到大的顺序排列是最节省空间的!!!!
19.typedef 类型名 重新定义的类型名 有利于程序的通用和移植
20. 内存四区:
栈区: 存储临时变量, 局部变量、 形参 、保护现场
堆区: 是由程序员自己管理, 申请空间:malloc 释放:free
数据段: 存储全局变量/静态变量/常量
未初始化数据段:未初始化的全局变量和静态变量, 默认初始化为0
初始化数据段:初始化的全局变量和静态变量
常量区: 常量, const +静态变量/全局变量, 只读的
正文段: 运行的代码 , 只读的
21.malloc(个数):定义太少,内存越界;不释放内存,内存泄漏。不要二次释放。释放完后指针指向NULL。返回值为一个通用指针,要进行强转,每次都要判断是否申请成功。
22.关键字const:常变量,拥有常量的属性,防止变量被恶意修改。const int *p=&a;修饰指针指向的内存;int *const p=&a;修饰指针的指向。可以同时使用两种限制。
23.enum枚举:enum 名称{常量1,……};有分号。常量名默认从0开始,依次递增,也可以进行赋值,从赋值后递增。可以gdb :p d 常量名称 查看常量值。
24.static静态变量:修饰局部变量,生存期变为程序开始到结束,修饰全局变量,作用域变为本.c文件。修饰函数,变为内部函数,只能在定义的文件内使用。
25.extern全局:全局函数的声明,外部函数声明和static做对比。
26.一级指针:传递变量地址。二级指针:传递一级指针地址。(主要是指针具有等级性)
27.fopen(“路径文件名”,“模式”):打开文件,模式:a(追加),w(写),r(读)。ab(后面加b,以二进制读写。写和追加会有创建文件的功能。返回值为FILE *类型。
28.fwrite/fread(内存起始地址,类型大小,个数,文件地址)返回值为写入或读取个数,小于每次写入读取个数为失败。
29.fprintf/fscanf(文件地址,和printf/fscanf相同)
30.fclose每次操作文件后,要关闭文件。
31.顺序结构更方便查找,链表结构更方便插入
32.链表尾插法:1.创建新的节点并初始化2.将新节点插入链表。若是空链表则用头地址保存新节点地址,若不是则用上一个节点的next保存新节点地址。
33.链表头插法:1.创建新节点并初始化2.将新节点插入链表。若是空链表则用头地址保存新节点地址,若不是则用新节点的next保存上一个头地址,并放到第一个节点前面。
34.头插法会改变头指针指向,尾插法需要多一个尾地址指针进行移动。
35.对于链表的任何操作都要考虑三种情况:头部,中间,尾部。
本文发布于:2024-02-13 10:03:16,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/1715393127251767.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
| 留言与评论(共有 0 条评论) |