华清远见嵌入式学习day05——LinuxC语言高级编程

                                                                          函数

一、函数

1.定义
         特定功能的代码块集合
【1】.函数的的定义
【2】.函数的使用
关注的问题:
(1).函数的功能
(2).函数的形参
(3).函数的返回值

2.函数的一般定义形式
<数据类型>函数名(<形参列表>){

函数体;
return<返回值>;
}

数据类型修饰的是返回值的类型
3.函数的声明
<数据类型>函数名(<形参列表>);
4.函数的调用
<数据类型>变量名 = 函数名(<实参>);
5.函数的传参
【1】.赋值传参
           将实参的值传递给形参
【2】.地址传参
             将实参的地址传递给形参
【3】.数组传参
            传递数组名

======================================================

重点理解:

一维数组   int a [10] --------->  int a[]
本质是地址传参
二维数组 int a [3][4] ------------>  int[][4]
运用数组指针

                  指针函数
本质:函数,函数的返回值是指针
一般定义形式:
<数据类型>*函数名(<形参列表>){

函数体;
return 地址常量/指针变量;
}

     char *strcpy(char *dest, const char *src);
     char *strcat(char *dest, const char *src);            

 

                        函数指针
本质:指针,只想函数的地址(函数名)  指针变量
一般定义形式:
<数据类型>(*函数指针变量名)(<形参列表>);
函数指针调用函数方式
(*p)(参数)
     p(参数)

调用:
        
        函数指针变量名(<形参>);
        (*函数指针变量名)(<形参>);
        
        int test(int a,int b, int (*pFunt)(int m,int n));

                   函数指针数组
本质:数组,函数指针修饰,该数组的元素实函数指针
一般定义形式:
<数据类型>(*数组名[数组元素个数])(<形参列表>);

===================================================================

递归函数
       是指一个函数在函数体中直接调用或间接调用自身的函数
递推阶段:
       按递归公式递推从未知到已知,最终达到递归终止条件
回归阶段:
       按递归终止条件推出结果,逆向逐步带入递归公式

举例:设计函数求n!(n的阶乘)
        int func(int n)
        {
            if(n < 0){
                printf("input error...\n");
                return -1;
            }
        
            if(n <= 1){
                return 1;
            }else{
                return (n*func(n-1));   3 * func(2)  --->>>    2 * func(1)                                       
            }                            3 * 2 * 1    <<<---    2*1    <<<---
        }

 

二、条件编译和函数宏
#ifdef<宏名>

#else

#endif
作用:
1.工程可移植性
2.调试
3.用在头文件中防止重复包含
head.h    
        
        #ifndef __HEAD_H__
        #define __HEAD_H__
        
        ...
        
        #endif 

宏的使用:必须写在一行,使用\表示在同一行
do{

}while(0)
先执行后判断

        #define DELETE_POINTER(p)             \ 
        do                                   \ 
        {                                    \ 
            if(NULL != p)                    \ 
                free(p);                     \ 
            p = NULL;                        \ 
        }while(0)

=============================================================

重点:

三、结构体
1.结构体定义
构造数据类型    自定义数据类型
struct 结构体数据类型名 {
成员变量;
。。。
};

用结构体数据类型定义的变量叫结构体变量

 2. 结构体成员访问

 3. 结构体变量赋值&初始化
    

4.结构体数组
数组元素是结构体变量的数组
     <结构体数据类型>结构体数组名[元素个数];
5.结构体指针:
    <结构体数据类型>* 结构体指针变量名;
6.结构体指针数组
    <结构体数据类型>*数组名[元素个数];

===================================================================

四、共用体
union 共用体数据类型名{
成员变量;
};

区别:
     结构体会为每一个成员变量分配空间,共用体分配最大的变量所占的空间
特点:
    一次只能用共用体中的一个成员变量
    多次赋值会覆盖内容

大小端:
大端:数据的高字节存在内存的低地址
小段:反之

你可能感兴趣的:(华清远见嵌入式学习day05——LinuxC语言高级编程)