• C语言const修饰指针场景demo


    #include "stdlib.h"
    #include "stdio.h"
    #include "string.h"
    
    // const修饰其后的内容,const靠近谁就修饰谁
    
    // const使用场景二:const char* p
    // const 修饰的是指针变量所指向的内存空间, 所指向的内存空间不能被修改
    // 可以修改指针变量p的值,p所指向的内存空间是不能被修改,否则,编译error
    void test(const char* p) {
        //p[0] = 'a';  //error: 错误左值指定 const 对象
        p++;
    }
    
    // const使用场景三:char* const p
    // const修饰的是指针变量,告知编译器是常量指针
    // 指针变量不能被修改,指针变量所指向的内存空间是可以被修改的。
    void test1(char* const p){
        p[0] = 'a';
        //p++; //error: 错误左值指定 const 对象
    }
    
    // const使用场景四:const char* const p
    // const修饰的是指针变量和指针变量所指向的内存空间
    // 指针变量和指向的内存空间都不能被修改
    void test2(const char* const p) {
        //p[0] = 'a'; // error
        //p++; //error: 错误左值指定 const 对象
    }
    
    void main() {
    
        //const使用场景一:const int xx <==> int const xx
        // 特例 const int xx <==> int const xx
        const int a; // <==> int const a;
        int const b; // <==> const int b;
    
        /*
        * 指针变量和它所指向的内存空间,是两个不同的概念
        * 看const是放在*的左边还是右边,看const是修饰指针变量,还是修饰所指向的内存空间变量
        */
    
        const char* c;  // const 修饰的是指针变量所指向的内存空间, c所指向的内存空间不能被修改
        char* const d;  // const 修饰的是指针变量d,   d是一个常量指针
        const char* const e;
    
        {
            // 为什么C++编译器把数组变量定义为常量指针? 因为如果修改了a指针的值,C++就找不到分配内存空间的首地址了,就无法释放内存
            int a[10]; // a是一个指针==>a是常量指针 为什么C++编译器把数组变量定义为常量指针。
            //a++; // error
            // C++编译器要拿着a去析构内存,为了避免你把a的指向改变。
        }
    
    
        system("pause");
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
  • 相关阅读:
    upload-labs靶场通关指南(5-8关)
    SpringBoot图片验证码
    【数据库系统概论】数据查询之单表查询。详细解释WHERE、OEDER BY、GROUP BY 和 HAVING
    Dubbo3应用开发—协议(Dubbo协议、REST协议 、gRPC协议、Triple协议)
    小猫爪:AWR294x学习笔记02-AWR294x之DPM&IPC
    Gradle-JDK版本问题导致运行失败
    如何实现校园网的规划与设计
    Another app is currently holding the yum lock; waiting for it to exit
    Python ————浅拷贝与深拷贝
    [附源码]计算机毕业设计JAVA实践教学管理系统
  • 原文地址:https://blog.csdn.net/luoqingyan/article/details/126678731