随笔分类 - C语言
摘要:数据要进行持久化存储就需要用到文件。C/C++ 将文件看作有序的字节流,每个文件都是以 EOF(文件结束标志)结束。 按数据的组织形式,文件可分为文本文件和二进制文件。 数据在内存中以二进制形式存储的,如果不加转换地输出到外存,就是二进制文件。如果要求在外存上以 ASCII 码形式存储,需要在存储前
阅读全文
摘要:有时候需要将不同类型的数据组合为一个整体,以便于引用。例如,一名学生有学号、姓名、性别、年龄等属性,如果针对每个属性都单独定义一个变量,那么当有多名学生时变量就难以分清。结构体就是用来管理不同类型的数据组合。 结构体的声明与定义 结构体的声明一般形式为: struct 结构体名{ 成员1; 成员2;
阅读全文
摘要:在不同的函数之间传递数据时,可以使用如下方法: 参数:通过形参和实参 返回值:用 return 语句返回计算结果 全局变量 全局变量与局部变量 全局变量:函数之外定义的变量称为全局变量(外部变量); 局部变量:在一个函数内部定义的变量称为局部变量(内部变量)。 全局变量使用: #include <s
阅读全文
摘要:形参与实参的一些注意点: 定义函数中指定的形参,如果该函数没有被调用,形参是不占用内存空间的。只有发生函数调用时,形参才被分配内存单元。在调用结束后,形参所占的内存单元也会被释放。 实参可以是常量、变量或表达式。 只能由实参传给形参,是单向值传递。 形参相当于局部变量,不能再定义局部变量与形参同名,
阅读全文
摘要:递归调用即函数自身调用自身,我们把这种函数称为递归函数。 递归函数一定要有结束条件,否则会死循环。 递归调用核心是: 找递归公式 编写递归结束条件 在解决一些问题时,使用递归能降低编程的难度。 例如上楼问题:有n个台阶,一次只能上1个台阶或2个台阶,请问走到第n个台阶有几种走法? 找递归公式:只能从
阅读全文
摘要:模块划分 在实际应用中,一个较大的 C 程序并不会把所有代码都放入 main 主函数中,而是进行模块化设计,每个程序模块作为一个源程序文件,再由若干源程序文件组成一个 C 程序。这样处理便于分别编写、分别编译、进而提高调试效率。 #include <stdio.h> void func1(){ //
阅读全文
摘要:函数要先声明后调用! 函数的声明和定义 函数的声明:把函数的名字、函数类型及形参类型、个数和顺序通知编译系统,以便在调用该函数时编译系统能正确识别函数并检查调用是否合法。 函数的定义:对函数功能的确立,包括指定函数名、函数值类型、形参及其类型、函数体等,它是一个完整的、独立的函数单位。 #inclu
阅读全文
摘要:我们在学习完C语言的数组后都会觉得数组长度固定很不方便,其实C语言的数组长度固定是因为其定义在栈空间,而栈空间的大小在编译时是确定的。如果使用的空间大小不确定可以使用堆空间。 #include <stdio.h> #include <string.h> #include <stdlib.h> //m
阅读全文
摘要:指针的定义 如果在程序中定义了一个变量,那么在对程序进行编译时,系统就会给这个变量分配内存单元,按变量地址存取变量值的方式称为直接访问,如printf("%d",i);和scanf("%d",&i);;另一种存取变量值的方式称为间接访问,即将变量i的地址存放到另一个变量中,在C语言中,指针变量就是用
阅读全文
摘要:strlen 函数 strlen 函数用于统计字符串长度 size_t strlen(const char *_Str); strcpy 函数 strcpy 函数用于将某个字符串复制到字符数组中 char *strcpy(char *_Dest,const char *_Source); strca
阅读全文
摘要:gets 函数 scanf函数在读取字符串时遇到空格就认为读取结束,不利于读取一行字符串,gets函数就是为了解决这个问题的。 gets 函数的格式: char *gets(char *str); gets 函数从 STDIN 读取字符并把它们加载到str中,直到遇到 '\n'。gets 函数不会存
阅读全文
摘要:C语言中不提供字符串类型,用字符数组来存储字符串。 字符数组 //定义并初始化字符数组 //char c[10] = {'h','e','l','l','o'}; //更方便的方式: char c[10] = "hello"; //注意c[5]中存储的是'\0' C语言规定字符串的结束标志为 '\0
阅读全文
摘要:一维数组的传递,数组长度无法传递给子函数。 #include <stdio.h> void print(int b[], int len){ for(int i=0; i<len; i++){ printf("%-3d", b[i]); } b[4]=20; printf("\n"); } int
阅读全文
摘要:在C语言中,访问数组时编译器并不会检查数组下标是否越界。 这种不加检查的行为的好处是不需要浪费时间对有些已知正确的数组下标进行检查,坏处是会导致错误地访问别的地址空间。 #include <stdio.h> //数组访问越界 int main() { int a[5]={1,2,3,4,5},i=2
阅读全文
摘要:sizeof 用于求常量或变量所占用的空间大小。 sizeof 是一个运算符,并不是一个函数!!! #include <stdio.h> int main() { int i = 0; printf("i size is %d",sizeof(i)); return 0; }
阅读全文
摘要:&& 和 || 的短路运算是指如果在进行前面的表达式的运算过程中,通过判断已经能明确知道整个逻辑表达式的结果,那么就不会进行后面表达式的运算判断。 #include <stdio.h> int main() { int i=0, j=1; i && printf("you can't see me\
阅读全文
摘要:C语言通过 scanf 函数读取键盘输入,键盘输入又被称为标准输入(stdin)。 当 scanf 函数读取标准输入时,如果没有任何内容,那么 scanf 函数会被阻塞。 scanf 函数的声明: #include <stdio.h> int scanf(const char *format, ..
阅读全文
摘要:printf 函数可以输出各种类型的数据。实际原理是 printf 函数将各种类型的数据格式化为字符串后,放入标准输出缓冲区,然后将结果显示到屏幕上。 语法 printf 函数的声明: #include <studio.h> int printf(const char *format, ...);
阅读全文
摘要:数据类型 数据类型的分类: 基本类型 整型 int 浮点型 float 字符型 char 构造类型 数组 [] 结构体 struct 指针类型 * 空类型 void 常量 常量是指在程序运行过程中,其值不发生变化的量。 常量的分类: 整型常量:100, 123, -100, 0 浮点型常量(也称实型
阅读全文