一点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位
posted @ 2022-10-03 23:29  z5onk0  阅读(52)  评论(0编辑  收藏  举报