嵌入式学习 Day 29

函数:
    1.函数的定义
    2.函数的调用
    3.函数的声明

1.函数传参:


    1.赋值传递(复制传递)

        函数体内部想要使用函数体外部变量值的时候使用复制传递

    2.全局变量传递

    3.地址传递

        函数体内部想要修改函数体外部变量值的时候使用地址传递
        函数体内想修改函数体外指针变量值的时候传指针变量的地址即二级指针
    

注意:这是值传递不是地址传递 

区分赋值传递和地址传递关键在于看实参中所传是变量的值还是变量的地址

这才是地址传递(二级指针传递)

    4.整形数组传递

        int a[5] = {1, 2, 3, 4, 5};

        int Fun(int parray[5]);                  //很少用,除非限定了数组的长度(pipe中用到)
        int Fun(int parray[], int len);        //后两个长度传多少就操作几个元素
        int Fun(int *parray, int len);         //这是本质(本质传的都是指针),用这种最规范
    

 注意:这是值传递

这里a作为数组首元素的地址,是一个常量,是值传递不是地址传递,不会因被调的操作而改变。

指针做值传递,不会改变指针的值,但可以在被调中通过指针加偏移量来改变指针所指向空间的值

    5.字符型数组和字符串的传递

        char str[32] = {"hello world"};

        int Fun(char *pstr);   //字符型数组传参时只需要传数组首元素的地址,不要传数组长度(昌都可以根据  '\0'  来算出)

    6.整形二维数组传递

        int a[2][3] = {1, 2, 3, 4, 5, 6};

        int Fun(int (*parray)[3], int len); //传二维数组的数组名(二维数组的数组名是指向数组第一行元素的一个数组指针)行数

 

对数组指针取*,值不变,类型降级为指向第一个元素的指针(原来是指向第一行的指针)

    7.字符型二维数组传递

        char str[5][32] = {"hello", "world", "how", "are", "you"}; 

        int Fun(char (*pstr)[32], int len);

 

 

 

多个字符串存储用二维数组,操作用指针数组 

    8.指针数组传递

        char *pstr[5] = {NULL};

        int Fun(char **ppstr, int len);

    9.结构体变量传递(整个的拷贝)

        struct student s;

        int Fun(struct student tmp);

    10.结构体指针传递(只拷贝要用的,占用内存更小)

        struct student s;

        int Fun(struct student *ps);

    11.结构体数组传递 

        struct student stu[3];

        int Fun(struct student *pstu, int len);

注意:

1.传递数组,外面怎么操作数组,里面就怎么操作数组

2.一维数组就传数组名和长度(一维字符型数组只传数组名)

   二维数组就传数组名和行数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值