C语言基础知识05---必背+函数

目录

必备知识点

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

必备知识点

1、C语言5大分区

        栈区:局部变量、临时变量、形参

        堆区:程序员自主管理的区域,malloc()申请,free()释放

        静态全局区:全局变量、静态修饰的局部变量

        二进制代码段:代码的二进制数据

   1.1 局部变量

        关键字:无

        储存位置:栈区

        定义范围:函数内部

        使用范围:函数内部

        生命周期:函数运行时创建函数结束时死亡

        初始值:垃圾值

   1.2 全局变量

        关键字:无

        储存位置:静态全局区

        定义范围:函数外部

        使用范围:当前文件

        生命周期:程序运行时创建,程序结束时死亡

        初始值:默认为0

   1.3 静态局部变量

        关键字:static

        储存位置:静态全局区

        定义范围:函数内部

        使用范围:函数内部

        生命周期:程序第一次运行时创建,程序结束时死亡

        初始值:定义的时候进行初始化

   1.4 外部声明变量

        关键字:extern

        储存位置:静态全局区

        定义范围:当前文件

        使用范围:当前文件

        生命周期:程序运行时创建,程序结束时死亡

2、关键字

   2.1 static

        1.修饰局部变量为静态全局变量,延长声明周期

        2.局部变量本身是随函数运行创建和死亡的

        3.被修饰后,在函数第一次运行时创建,一直到程序结束死亡

        4.后续使用函数时,静态全局变量会继承之前的数据继续使用

        5.修饰全局变量和函数时,代表私有化(只能在当前文件使用)

   2.2 extern

        修饰全局变量或函数,声明该变量或函数来自于外部文件

        extern的修饰是声明,不是定义

                声明:不分配空间

                定义:需要分配空间

                                A.c int a=5;        B.c extern int a;

3、局部变量和全局变量能不能同名?

        可以同名,就近原则(在当前层查找变量名,如果找不到,则去上一层找)

4、实参&&形参

        实参:

                实际参数=具体的值或变量

        形参:

                形式参数=未知量,仅用于代替运算

                        实参:函数调用时传入的参数

                        形参:函数定义时,形式上运算的参数,没有实际值

        实参和形参传递时,类型一致、数量一致、顺序一致

函数

1、函数的作用

封装代码块,提高代码的利用率,减少重复代码

2、函数的分类

   2.1 主函数

        int main()

        程序入口,程序出口,有且仅有一个,可以调用子函数

   2.2 子函数

        遵守标识符命名规则

        只有一个功能块,被调用时才会运行

        子函数可以相互调用

        子函数不能调用主函数

3、函数命名

        望文生义,直接提现功能性,注意写注释

4、函数定义格式

        函数类型 函数名(形参类型 形参, 形参类型 形参,……) 

        { 

                被封装的代码块 

        }

5、函数传参

        函数调用时,把实参的值传递给形参,形参在函数运行时使用

        实参和形参:类型一致、数量一致、顺序一致

   5.1 值传参

        实参把自己的数据复制给形参,操作形参对外界数据没有影响

   5.2 地址传参

        操作形参对外界数据有影响

6、函数类型

        函数类型与返回值类型一致

                返回值只能有一个

                返回值出现时,代表函数已经运行结束

                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); // 有返回值有传参

   6.1 函数的声明

        函数定义的第一行加上;放到文件主函数上方

   6.2 函数调用

        有参传参,无参不写

        返回值根据需求使用

   6.3 递归函数

        自己调用自己,直到某一个条件达成,调用结束

        固定模板:

void fun(int n)// 初始值
{
    if(n == 0)// 结束条件
    {}
    else
    {
    // 正序
    fun(n-1);//步长
    // 逆序
    }
}

7、指针函数&&函数指针

   7.1 指针函数:

        返回值是地址的函数

        void *p(void)

   7.2 函数指针:

        指向函数的指针

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)

   7.3 函数传参传递数组的3种形式(重点)

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 都是指针

你可能感兴趣的:(C语言学习,算法,数据结构,c语言)