嵌入式C基础学习笔记-Day9-函数指针、指针函数

函数参数是一维数组:
    也分为值传递和地址传递(本质上都是地址的传递,所以不能通过sizeof(数组名)/sizeof(数组某个元素)来计
    算数组元素的个数)
    void fun(int a[], int n);
    void fun(int *a, int n);
    
    在给函数传递字符串时,只需要传递首地址(字符串末尾有'\0')
    函数中定义的变量它的作用域在函数内部,生命周期开始于函数调用,结束于函数调用结束
    
函数参数是二维数组时:
    void fun(int n, int m, int a[][n]);   
    void fun(int n, int m, int (*a)[n]);
    //void fun(int n, int m, int **a);   //**a是二级指针 传值时不能传递二维数组
    
二级指针:
    指向指针的指针
    一个二级指针变量可以存放一级指针的地址
    一般形式:
    <数据类型> **二级指针名;
    int **p;
    
    int a = 10; 
    int *pa = &a;
    int **pp;
    pp = &pa;
    
    pp == &a  --> *pp == *&pa == pa == &a --> **pp == **&pa == *pa == *&a == a
    
    二级指针和二维数组的关系?
    没有关系!!!

指针函数:
    本质上是一个函数,只不过返回值是一个指针
    一般形式:
    <数据类型> *<函数名>(形参列表)
    {
        函数体;
        return 地址;
    }
    不能返回局部变量的地址
    
    注意:
        函数的地址就是函数名
函数指针:
    本质上是一个指针,只不过这个指针指向的是一个函数
    一般形式:
    <数据类型> (*<函数指针名>)(形参列表);
    int add(int a, int b);
    int (*p)(int, int);   //p就是一个指向返回值为int且参数有两个int类型的函数
    
static:
    1、延长变量的生命周期;
    2、限制作用域;
    3、修饰的变量只能被初始化1次
    4、修饰的变量如果没有初始化,会被自动初始化0
    
const :常量化关键字
    const int a = 10;   //修饰变量时表示这个为只读(常量化)
    
    
    int val1 = 10, val2 = 20;
    const int *p = &val1;      //常量化指针,不能通过该指针去修改指向空间的内容
    p = &val2                   //但是可以修改指向
    int const *q = &val1;      //同上
    
    int * const po = &val1; //指针的指向不可以发生改变,但是可以通过该指针修改对应空的内容
    
    //指向和内容都不允许修改
    const int *const pp = &val1; 
    
void *:
    代表任意类型的指针,不支持+、-

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谁偷了我ctrl键

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值