• const用法精讲


    1.说在前面:

    类似结构体函数参数通过指针来传递可以节省空间

     

    但是存在一种情况,指针容易把原来的变量修改了,形成误操作,加const防止误操作,下面的p->age=100;会引起报错(但是可以间接修改)

    2.使用场景:

    //const修饰变量

    void test01(){

    //1. const基本概念

    const int i = 0;

    //i = 100; //错误,只读变量初始化之后不能修改

    //a. 定义const变量最好初始化

    const int j;

    //j = 100; //错误,不能再次赋值

    //b. c语言的const是一个只读变量,并不是一个常量,可通过指针间接修改

    const int k = 10;

    //k = 100; //错误,不可直接修改,我们可通过指针间接修改

    printf("k:%d\n", k);

    int* p = &k;

    *p = 100;

    printf("k:%d\n", k);

    }

    //const 修饰指针(*号为界限,左定值,右定域)

    void test02(){

    int a = 10;

    int b = 20;

    //const放在*号左侧 修饰p_a指针指向的内存空间不能修改,但可修改指针的指向

    const int* p_a = &a;

    //*p_a = 100; //不可修改指针指向的内存空间

    p_a = &b; //可修改指针的指向

    //const放在*号的右侧, 修饰指针的指向不能修改,但是可修改指针指向的内存空间

    int* const p_b = &a;

    //p_b = &b; //不可修改指针的指向

    *p_b = 100; //可修改指针指向的内存空间

    //指针的指向和指针指向的内存空间都不能修改

    const int* const p_c = &a;

    }

    //2.const指针使用场景

    struct Person{

    char name[64];

    int id;

    int age;

    int score;

    };

    //每次都对对象进行拷贝,效率低,应该用指针

    void printPersonByValue(struct Person person){

    printf("Name:%s\n", person.name);

    printf("Name:%d\n", person.id);

    printf("Name:%d\n", person.age);

    printf("Name:%d\n", person.score);

    }

    //但是用指针会有副作用,可能会不小心修改原数据

    void printPersonByPointer(const struct Person *person){

    printf("Name:%s\n", person->name);

    printf("Name:%d\n", person->id);

    printf("Name:%d\n", person->age);

    printf("Name:%d\n", person->score);

    }

    void test03(){

    struct Person p = { "Obama", 1101, 23, 87 };

    //printPersonByValue(p);

    printPersonByPointer(&p);

    }

     

  • 相关阅读:
    最强的AI视频去码&图片修复模型:CodeFormer
    docker配置nginx
    【MTU】Windows/Linux下修改MTU
    WordPress Mixed Content混合内容警告:4 种简单的修复方法
    postgres 空间坐标转换和获取geom中心点
    Mybatis-Plus批量插入应该怎么用
    第4章 基于注解开发Spring AOP
    使用C++的ORM框架QxORM
    基于云平台的智能变电站远程监控系统
    buuctf(探险3)
  • 原文地址:https://blog.csdn.net/weixin_46098612/article/details/125487402