嵌入式学习(Day13)

1.const指针

    const 关键字   常量(只读)   readonly

            1.const int *p;

            2.int const *p;

            3.int *const p;

            4.const int *const p;

            5.int const *const p;

    1和2是等价的

    const修饰 *p,指针变量p的值可以改变,但不能利用指针修改指向空间中的值

     3const修饰 p,指针变量p的值不能改变,但可以利用指针变量p修改指向空间中的值

    一定要对指针初始化

    4和5是等价的

    const修饰p和*p,指针变量p的值不能改变,也不能利用*p改变直系那个空间中的值

    一定要初始化

   

2.void

    void a;

    高精度

    int *p;

    double *p;

    char *p;

    低精度

    void *p;

p保存内存地址

    int *、double *、char * 转换为 void * 需要强制类型转换

    void *转换为int *、double *、char *不需要强制类型转换

    strcpy 拷贝字符串

    memcpy 拷贝一段内存空间

3.函数指针和指针函数:

    指针函数:是函数,函数的返回值类型是指针类型

    函数指针:是指针,指针指向了函数

    1.指针函数:

        局部变量的地址不能返回,因为局部变量会随函数作用域结束被回收,虽然能够获得返回的地址,但地址对应的空间已经被回收过了

        将函数的返回值作为下一个函数的参数

    2.函数指针:

        int (*Fun)(int a, int b) = NULL;

        定义函数指针变量Fun,占8个字节空间,指向int返回值有2个int参数的函数

4.C语言中二级指针使用场景:

    1.指针数组传参时:

        char *str[5];

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

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

       char *p = NULL;

       int Fun(char **pp);

构造数据类型:

    数据类型:

        1.基本数据类型:

            int

            double

            char

        2.构造数据类型:

            1.struct 结构体

            2.union 共用体

            3.enum  枚举

1.结构体:

    1.结构体类型的定义

        struct 结构体名

        {

            数据类型1 成员变量1;

            数据类型2 成员变量2;

            数据类型3 成员变量3;

       

        };

    2.结构体变量的定义

        数据类型 变量名;

        数据类型 *指针变量名;

    3.结构体变量的初始化:

        1.全部初始化:

            struct student s = {"zhangsan", 'm', 19, 100};

        2.局部初始化:

            struct student stu = {

                .name = "lisi",

                .score = 90,

            }

    4.结构体成员变量的访问:

        .    :结构体变量类型访问成员变量使用 .

         ->  :结构体指针类型访问成员变量使用 ->

        整体类型由成员变量类型决定

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值