一点C语言补充知识
1 C知识点
1.1 传值传指针传引用
- 传值不能改变实参的值,传指针传引用能改变实参值
- 传指针中形参是实参的副本,不能够改变实参的值,但能够通过指针改变对应地址的内容
- 传引用中形参也建立了局部变量,但传入的是地址作为实参的别名,通过间接寻址改变实参的值
1.2 C语言的结构化、模块化设计
(1)文件
- 包括头文件和源文件,源文件作为编译单元,头文件中变量和函数的生命为每个编译单元提供共享和链接
(2)关键字和概念
- 包括static, extern, 作用域(可见性), 生命期, 全局, 局部
(3)变量类型
- 自动变量:由auto修饰,函数内部不加任何关键字修饰的变量就是动态变量。
- 寄存器变量:由register修饰,提高存取速度。
- 局部静态变量:由static关键字修饰,函数内部由static关键字修饰,作用域是函数体内,生命期为整个程序。
- 全局静态变量:由static关键字修饰,函数外部由static关键字修饰,作用域是当前文件,生命期为整个程序。
- 外部变量:由extern关键字修饰,函数外部不加任何关键字修饰的变量是外部变量(加extern修饰只是声明,不加修饰成为定义),作用域是整个程序,生命期为整个程序。
- const变量:值不能够修改的变量,通常用于修饰指针,
const int *p
表示p指向的数据时只读的,int * const p
表示p本身是只读的,通常用在函数的指针形参中,表示函数不会修改指向数据;函数外的非const变量默认为外部变量,const变量默认为非外部变量,如果想被其它文件访问,必须显示指定为extern。
(4)函数类型
- 外部函数:由extern修饰,不加任何关键字修饰的函数默认为外部函数,作用域是整个程序。
- 内部函数:由static修饰,作用域是当前文件。
(3)多文件编程
- 在头文件中声明变量和函数,用static、extern关键字修饰内部、外部变量,用static关键字修饰内部函数(默认为外部函数)。
- 源文件中定义变量和函数,将要使用变量和函数的声明include进来。
1.3 数组和指针
- 数组名是一个指向数组首元素的常量指针
int a[10];
int *p = a;
//则访问数组元素a[i]也可以写作:
*(a+i) = 5;
*(p+i) = 5;
p[i] = 5;
- 函数参数传递数组
int b[10];
//则传递b[10]可以写作:
/////////////////////////////
int Avg(int b[10]);
int avg = Avg(b);
/////////////////////////////
int Avg(int b[], int Length);
int avg = Avg(b, 10);
/////////////////////////////
int Avg(int *b, int Length);
int avg = Avg(b, 10)
1.4 位域
struct bs{
int a:8;
int b:2;
int c:6;
}data;
//说明data为bs变量,共占两个字节。其中位域a占8位,位域b占2位,位域c占6位