华清远见嵌入式学习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 共用体数据类型名{
成员变量;
};

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

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

华清远见嵌入式linux应用程序开发技术详解(内部资料) 第1章 Linux快速入门   1.1 嵌入式Linux基础   1.2 Linux安装   1.3 Linux文件及文件系统   1.4 实验内容——安装Linux操作系统   本章小结   思考与练习  第2章 Linux基础命令   2.1 Linux常用操作命令  2.2 Linux启动过程详解  2.3 Linux系统服务  2.4 实验内容   本章小结   思考与练习  第3章 Linux下的C编程基础   3.1 Linux下C语言编程概述  3.2 进入Vi  3.3 初探Emacs   3.4 Gcc编译器   3.5 Gdb调试器  3.6 Make工程管理器  3.7 使用autotools   3.8 实验内容   本章小结   思考与练习  第4章 嵌入式系统基础   4.1 嵌入式系统概述   4.2 ARM处理器硬件开发平台   4.3 嵌入式软件开发流程   4.4 实验内容——使用JTAG烧写NAND Flash   本章小结   思考与练习  第5章 嵌入式Linux开发环境的搭建   5.1 嵌入式开发环境的搭建   5.2 U-Boot移植   5.3 实验内容——移植Linux内核   本章小结   思考与练习  第6章 文件I/O编程   6.1 Linux系统调用及用户编程接口(API)  6.2 Linux中文件及文件描述符概述   6.3 不带缓存的文件I/O操作   6.4 嵌入式Linux串口应用开发  6.5 标准I/O开发   6.6 实验内容   本章小结   思考与练习  第7章 进程控制开发   7.1 Linux下进程概述  7.2 Linux进程控制编程   7.3 Linux守护进程   7.4 实验内容   本章小结   思考与练习  第8章 进程间通信   8.1 Linux下进程间通信概述   8.2 管道通信   8.3 信号通信  8.4 共享内存   8.5 消息队列  8.6 实验内容   本章小结   思考与练习 第9章 多线程编程   9.1 Linux下线程概述   9.2 Linux线程实现   9.3 实验内容——“生产者消费者”实验   本章小结   思考与练习  第10章 嵌入式Linux网络编程   10.1 TCP/IP协议概述   10.2 网络基础编程   10.3 网络高级编程   10.4 ping源码分析   10.5 实验内容——NTP协议实现   本章小结   思考与练习  第11章 嵌入式Linux设备驱动开发   11.1 设备驱动概述  11.2 字符设备驱动编写   11.3 LCD驱动编写实例  11.4 块设备驱动编写  11.5 中断编程   11.6 键盘驱动实现   11.7 实验内容——skull驱动   本章小结   思考与练习  第12章 Qt图形编程   12.1 嵌入式GUI简介  12.2 Qt/Embedded开发入门  12.3 实验内容——使用Qt编写“Hello,World”程序   本章小结 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值