C语言程序设计知识点总结02
C语言程序设计知识点总结02
递归概念(recursion):
函数直接或间接地调用自己。
直接递归:函数直接调用自己。A调用A自己。
间接递归:函数间接调用自己。A调用B,B再调用A等。
递归编程要点:
一定要注意递归结束条件和参数的变化。
生存期(lifetime): 变量何时生成及何时撤销。
作用域(scope) : 变量在程序的什么范围内是可以使用的。
存储类别(storage type): 变量存储在哪种存储器区域中并以何种方式存储。
全局变量(global variable):在任何函数之外定义的变量。
局部变量(local variable):在函数或语句块之内定义的变量。
作用域原则:
1、全局变量的作用域为定义它的位置到文件结束。
局部变量的作用域为定义它的函数或语句块内部。
2、当全局变量与局部变量同名时,在局部变量的作用域内局部变量起作用,全局变量被屏蔽。
3、可以用extern关键字扩展全局变量的作用域。
4、全局变量用static修饰时只能在本文件内起作用。
生存期原则:
1、全局变量的生存期为整个程序的生存期,即从程序进入内存到程序运行结束退出内存。
非静态的局部变量的生存期为进入定义它的函数或语句开始到退出该函数或语句块为止。
2、静态的局部变量的生存期为整个程序的生存期,即从程序进入内存到程序运行结束退出内存。
局部非静态变量:修饰为:auto或无,register
分配在栈或寄存器中。
局部静态变量:修饰为:static
分配在全局数据段中。
全局变量:分配在全局数据段中。
C程序基本结构:
一个C程序由一个或多个函数构成,这些函数分布在一个或多个源文件中,每个文件称为一个可编译单元。
模块化编译方法: 先将各个可编译单元分别编译,然后再将其链接起来构成可执行程序。
编译预处理:
在编译器编译源程序之前先进行的一些处理,如包含头文件,宏定义和宏展开以及条件编译等。C源程序中以#开头的行均为编译预处 理。
头文件:
通常包含类型定义,常量定义,函数声明等。
宏:
用一个名字(宏名)命名一个字符串。在编译之前,将程序中的所有宏名替换成对应的字符串,然后再编译。
注意:字符串和标识符中的和宏同名的串不替换!
条件编译:
根据特定的条件来决定是否编译某些代码段。
数组(Array):
相同类型的变量,在内存中连续存储。数组名指出了其存储的首地址,每个变量称为一个数组元素,数组中元素的个数称为数组的大小。数组元素的引用通过下标(index)进行。 数组为程序员提供了定义和处理多个同类型变量的方便。
一维数组的定义:
语法格式:数组元素类型 数组名[ 数组大小 ]; 例如:int arr[10];
注意:数组大小必须为常量表达式。
一维数组元素的引用:
语法格式:数组名[ 下标 ]
注意: 1. 下标必须为整型表达式。
2. 第一个元素的下标为0,最后一个为数组大小减1。
3. 如果数组元素下标超出正常的范围,则称为越界,下标越界不会导致语法错误,但通常会导致逻辑错。
一维数组的初始化:
1. 定义时初始化:
A. 完全初始化
int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int a[ ] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
B. 部分初始化
int a[10] = {1, 2, 3}; /* 其它元素为0 */
2. 使用时初始化:使用前先给各个元素赋值。
scanf(“%d”, &a[0]);
简单查找算法:
1、顺序查找。(数组可无序!)
2、折半查找。(数组必有序!)
简单排序算法:
1、 冒泡排序。
数组作为函数的参数:
传递的只是数组名,即数组在内存的首地址,并不把所有的数组元素的值传递给函数。在函数内对数组的操作也就是对原来的数组进行操作。
字符数组:
每个数组元素是字符的数组。
例:char str[ ] = {‘a’, ‘b’, ‘c’};
字符串:
用双引号括起来的若干个字符构成的序列。如“abc”。
注意:C语言中字符串是以字符数组的形式在内存中存储的,每个字符以ASCII码存储,结束符为’\0’。 “a”在内存中为:’a’,‘\0’。而‘a’在内存中为’a’。
sizeof(“a”) = 2; strlen(“a”) = 1;
sizeof(‘a’) = 4 // C99的标准, 'a'是整型字符常量,常量!常量!常量!被看成是int型, 所以占4字节。
字符串的初始化:
1. char str1[ ] = {‘a’, ‘b’, ‘c’, ‘\0’};
2. char str2[ ] = {“abc”};
3. char str3[ ] = “abc”;
4. char str4[4] = {‘a’, ‘b’, ‘c’, ‘\0’};
5. char str5[4] = {“abc”};
6. char str6[4] = “abc”;
字符串操作库函数:
1. gets与puts:输入输出
2. strlen:求字符串长度
3. strcpy:字符串拷贝
4. strcmp:字符串比较
5. strchr:串中查找字符
6. strcat:字符串连接
二维数组的定义及初始化:
语法格式:类型 数组名[行数][列数];
注意:二维数组定义时行数和列数必须是常量表达式。二维数组在内存中按行存储。
int a[2][3] = { {1, 2, 3}, {4, 5, 6}};
int a[ ][3] = { {1, 2, 3}, {4, 5, 6}};
int a[ ][3] = {1, 2, 3, 4, 5, 6};
二维数组元素的引用:
数组名 [行号][列号]
注意:行号和列号必须是整型表达式。行号和列号的范围为[0, 大小 – 1]。