代码规范
编码规范1、程序开发流程 (1)需求分析 (2)功能设计 (3)编写代码 (4)单元测试 (5)功能测试 (6)代码REVIEW2、公司开发,一般会有公司的开发规范。3、代码风格要有助于其他程序员易于理解。 宏观上高质量编码规范1、版本和版权的声明2、头文件结构 (1)版本和版权的声明 (2)预处理部分 (3)函数或者结构体声明头文件使用注意事项(1)为了防止头文件被重复引用,在代码中使用: #ifndef、#ifdef、#define、#endif(2)引用标准头文件: #include<标准头文件名.h>(3)引用非标准头文件: #include “非标准头文件名.h”(4)头文件中只存放”声明”,不存放”定义” 12345void pr();//这是声明void pr(){//这是定义,实现 函数体} (5)多个c文件合并生成.out/.exe可执行文件的过程 方法一 把定义部分.c文件单独编译成.o文件 gcc 1.c -c 再把包含main函数的源文件也单独编译成.o文件 gcc 2.c -c 最后把多个.o文件链接...
链表
链表与数组对比 对比项 链表 数组 查找 慢 快 修改 慢 快 插入 快 慢 删除 快 慢 创建链表123456789101112131415161718192021222324252627282930313233343536#include <stdio.h>#include <stdlib.h>typedef struct st_node{ int score; //数据域 struct st_node *next; //指针域} Node,*Linklist;Node *creat_linklist()//创建链表头节点{ Node *header = (Node *)malloc(sizeof(Node)); if (NULL == header) { printf("内存分配失败!"); return NULL; } header->next = NULL; retur...
编译预处理
编译预处理是源代码在真正被全部gcc编译之前,编译器就要事先做的工作 宏定义C提供了一种可以替换源代码中的字符串的机制 语法:#define 宏名(参数表) 宏值 不带参数宏定义1234#define PI 3.1415926#define SIDE 10#define AREA SIDE*SIDE#define PR printf("ethaniel\n"); 带参数的宏定义12#define MIX(a) (a) * (a)#define MAX(a,b) a>b?a:b 文本包含文件目录:header.h 12345678910111213141516171819#ifndef HEADER_H#define HEADER_H#include <stdio.h>void pr();//函数声明/* 使用特定的.h头文件,完成所有相关内容的声明 1、宏定义 2、其他常用头文件的包含 3、结构体、共用体(联合体)、枚举类型的定义 4、外部函数的声明 5、全局变量声明 6、typedef声明*//...
main
main 函数是 C 程序的入口点,所有程序从这里开始执行。 12345678910111213#include <stdio.h>int main(int argc,char *argv[]){ //argc是执行当前可执行文件时,命令行中字符串的个数(包含命令行本身) //argv是命令行中所有的字符串,argv是一个字符串数组,argc值就是数组元素个数 int sum = 0; int i; for (i = 1; i < argc; i++) { } return 0; }
string.h
string.h 是 C 语言中处理字符串和内存操作的标准头文件。它包含了许多常用的字符串处理函数和内存操作函数。 主要函数分类字符串复制123456char* strcpy(char* dest, const char* src);// 将 src 复制到 dest(包括 '\0')// 注意:不会检查 dest 大小,可能溢出char* strncpy(char* dest, const char* src, size_t n);// 最多复制 n 个字符,更安全 字符串连接12345char* strcat(char* dest, const char* src);// 将 src 连接到 dest 末尾char* strncat(char* dest, const char* src, size_t n);// 最多连接 n 个字符 字符串比较123456int strcmp(const char* s1, const char* s2);// 比较两个字符串// 返回 0: 相等,<0: s1<s2,>0: s1>s2in...
math.h
math.h 是C语言标准库中的数学函数头文件,提供了一系列数学计算函数。使用前需要包含头文件: 1#include <math.h> 注意:编译时需要链接数学库,例如在GCC中使用 -lm 选项: 1gcc program.c -o program -lm 常用数学常数预定义常数: 1234567891011#include <stdio.h>#include <math.h>int main() { printf("圆周率 π = %.10f\n", M_PI); // 3.1415926536 printf("自然常数 e = %.10f\n", M_E); // 2.7182818285 printf("无穷大 INFINITY = %f\n", INFINITY); printf("非数 NAN = %f\n", NAN); return 0;} 基本数学运算函数绝对值函...
static
static是C语言中的一个重要关键字,它有多种用法,主要分为三种情况: static修饰局部变量特性:延长生命周期:使局部变量的生命周期变为整个程序运行期间保持持久性:变量只初始化一次,函数调用结束后值不会销毁作用域不变:仍然只能在定义它的函数内部访问 1234567891011121314#include <stdio.h>void test() { static int count = 0; // 只初始化一次 count++; printf("Count: %d\n", count);}int main() { test(); // 输出: Count: 1 test(); // 输出: Count: 2 test(); // 输出: Count: 3 return 0;} 内存分配: 普通局部变量:存储在栈区,函数结束时释放 static局部变量:存储在静态存储区(数据段),程序结束时释放 static修饰全局变量特性:限制作用域:将全局变量的作...
动态内存
动态内存函数的介绍使用malloc和free1void* malloc (size_t size); 函数说明:malloc函数向操作系统申请一块连续可用的内存,并返回指向这块内存的指针。返回值:void*,因为malloc并不知道你的内存放入什么类型的数据。参数:size表示内存的大小(字节) 注意:malloc函数的声明在stdlib.h 头文件中 1void free (void* ptr); 说明:free函数是专门是用来做动态内存的释放和回收的。返回值:void,无返回值。参数:ptr表示这块动态内存的首地址 1234567891011121314151617181920212223242526#include <stdio.h>#include <stdlib.h>int main(){ int *ptr = NULL; int size = 10; ptr = (int *)malloc(size * sizeof(int)); // 分配4个字节的动态内存 if(NULL == ptr)//判断...
文件操作
文件的概念文件标识 1、每个文件要有一个唯一的文件标识,以便于用户识别和引用 2、文件标识包含3部分:文件路径+文件名+文件后缀。 3、同一系统下不存在两个完全相同的文件标识 文件分类根据其数据存储方式和内容的特点: 文本文件: 是一种计算机文件,其中存储的是纯文本数据,通常使用ASCII码或Unicode编码进行表示。它包含的内容通常是人类可读的文本,比如字母、数字、标点符号和其他可打印字符,而不包含二进制数据或特殊格式。 格式:txt、csv、xml、html 二进制文件: 是一种计算机文件,其中存储的是以二进制形式表示的数据二进制文件可以包含各种类型的数据,如图片、音频、视频、可执行代码等。它们通常由特定的程序或应用程序进行创建和处理。 格式:JPEG、MP3、MP4、EXE 文本文件 二进制文件 存储方式 文本形式存储的文件,使用字符编码(如ASCII或Unicode)来表示字符 字节(8位)的形式 内容表示 内容是以可读的文本形式呈现,可以直接打开并查看。 通常是非文本数据,如图像、音频、视频等,不可直接阅读。 可编辑性 可以使用文本编辑器直接编辑...
自定义类型
结构体结构体类型的声明结构体是一种用户自定义的数据类型,用于存储不同类型的数据,可以包含多个不同的成员变量。 12345struct 结构体名 { 类型 成员变量1; 类型 成员变量2; //...}; 注意:1、{ }内部是结构体的成员变量2、结构体结尾时,最后的分号不能丢 特殊声明匿名结构体声明可以在定义一个结构体类型的同时,直接定义变量,可以不给结构体起名字 使用场景:一次性使用的结构体类型 12345678910struct{ int age; char name[20];} person;struct{ int age; char name[20];} person[20]; 结构体成员也是结构体类型结构体可以作为另一个结构体的成员 1234567891011121314151617181920212223242526#include <stdio.h>struct Date{ int year; int month; int...












