• 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);

    }

     

  • 相关阅读:
    算法-- 爬楼梯(Kotlin)
    外置编码矩阵神经网络all you need
    Java中的数组、Set、List、Map类型的互相转换总结
    spring boot 时间格式化输出
    【牛客-剑指offer-数据结构篇】JZ52 两个链表的第一个公共节点 两种思路 Java实现
    STM32-03基于HAL库(CubeMX+MDK+Proteus)输入检测案例(按键控制LED)
    gazebo各种插件
    C++ Qt开发:使用顺序容器类
    MFC Windows 程序设计[247]之多彩编辑框(附源码)
    Windows上Qt源码调试(使用VS2017调试qt5.12.0)
  • 原文地址:https://blog.csdn.net/weixin_46098612/article/details/125487402