必备知识点
1、C语言5大分区
1.1 局部变量
1.2 全局变量
1.3 静态局部变量
1.4 外部声明变量
2、关键字
2.1 static
2.2 extern
3、局部变量和全局变量能不能同名?
4、实参&&形参
函数
1、函数的作用
2、函数的分类
2.1 主函数
2.2 子函数
3、函数命名
4、函数定义格式
5、函数传参
5.1 值传参
5.2 地址传参
6、函数类型
6.1 函数的声明
6.2 函数调用
6.3 递归函数
7、指针函数&&函数指针
7.1 指针函数:
7.2 函数指针:
7.3 函数传参传递数组的3种形式(重点)
(short (**))p+2 16
(long *)p+2 16
const 系统库函数的传参中很常见
typedef 重命名数据类型
int a;
typedef int INT;
INT b;
typedef int (*p)[30];
p a; // a 是什么类型 int (*)[30]
int *a,b; // a=8 b=4
int a,*b; // a=4 b=8
typedef int INT;
INT *a,b; // a=8 b=4
INT a,*b; // a=4 b=8
typedef int * INT;
INT a,b; // a=8 b=8
INT *a,b; // a=8 b=8
INT a,*b; // a=8 b=8
栈区:局部变量、临时变量、形参
堆区:程序员自主管理的区域,malloc()申请,free()释放
静态全局区:全局变量、静态修饰的局部变量
二进制代码段:代码的二进制数据
关键字:无
储存位置:栈区
定义范围:函数内部
使用范围:函数内部
生命周期:函数运行时创建函数结束时死亡
初始值:垃圾值
关键字:无
储存位置:静态全局区
定义范围:函数外部
使用范围:当前文件
生命周期:程序运行时创建,程序结束时死亡
初始值:默认为0
关键字:static
储存位置:静态全局区
定义范围:函数内部
使用范围:函数内部
生命周期:程序第一次运行时创建,程序结束时死亡
初始值:定义的时候进行初始化
关键字:extern
储存位置:静态全局区
定义范围:当前文件
使用范围:当前文件
生命周期:程序运行时创建,程序结束时死亡
1.修饰局部变量为静态全局变量,延长声明周期
2.局部变量本身是随函数运行创建和死亡的
3.被修饰后,在函数第一次运行时创建,一直到程序结束死亡
4.后续使用函数时,静态全局变量会继承之前的数据继续使用
5.修饰全局变量和函数时,代表私有化(只能在当前文件使用)
修饰全局变量或函数,声明该变量或函数来自于外部文件
extern的修饰是声明,不是定义
声明:不分配空间
定义:需要分配空间
A.c int a=5; B.c extern int a;
可以同名,就近原则(在当前层查找变量名,如果找不到,则去上一层找)
实参:
实际参数=具体的值或变量
形参:
形式参数=未知量,仅用于代替运算
实参:函数调用时传入的参数
形参:函数定义时,形式上运算的参数,没有实际值
实参和形参传递时,类型一致、数量一致、顺序一致
封装代码块,提高代码的利用率,减少重复代码
int main()
程序入口,程序出口,有且仅有一个,可以调用子函数
遵守标识符命名规则
只有一个功能块,被调用时才会运行
子函数可以相互调用
子函数不能调用主函数
望文生义,直接提现功能性,注意写注释
函数类型 函数名(形参类型 形参, 形参类型 形参,……)
{
被封装的代码块
}
函数调用时,把实参的值传递给形参,形参在函数运行时使用
实参和形参:类型一致、数量一致、顺序一致
实参把自己的数据复制给形参,操作形参对外界数据没有影响
操作形参对外界数据有影响
函数类型与返回值类型一致
返回值只能有一个
返回值出现时,代表函数已经运行结束
return ; // 返回空 void fun();
return 0;// 返回 0 int fun();
return 1.5;// float fun();
return &a;// char * strcpy()
void fun(void); // 无返回值无传参
void fun(int a, float b, char *s); // 无返回值有传参
int fun(void); // 有返回值无传参
char * fun(char *s1, char *s2); // 有返回值有传参
函数定义的第一行加上;放到文件主函数上方
有参传参,无参不写
返回值根据需求使用
自己调用自己,直到某一个条件达成,调用结束
固定模板:
void fun(int n)// 初始值
{
if(n == 0)// 结束条件
{}
else
{
// 正序
fun(n-1);//步长
// 逆序
}
}
返回值是地址的函数
void *p(void)
指向函数的指针
void fun(void)
{}
void (*p)(void)=fun;
fun();
p();
int a[5]; int *p=a;
a[0] p[0]
int * fun1(int a,int b);
int * fun2(int n,int m);
int * (*p[2])(int ,int )={fun1,fun2};
fun1(5,6) == p[0](5,6)
p[1](1,2) == fun2(1,2)
char a[50]= “hello”; char a=’A’;
1.
void fun(char *p) fun(&a)
{
printf(“%s”,*p);
}
2.
void fun(char p[50])
{
for(int i0;i<50;i++)
{
printf(“%c”,*(p+i));
}
}
3.
void fun(char p[])
{
printf(“%s”, p);
}
这 3 种格式,形参 P 都是指针