• C语言-const char*,char const*,char *const理解


    By: Ailson Jack
    Date: 2022.12.04
    个人博客http://www.only2fire.com/
    本文在我博客的地址是:http://www.only2fire.com/archives/150.html,排版更好,便于学习,也可以去我博客逛逛,兴许有你想要的内容呢。

    微信公众号嵌入式那些事

    1、const char *ptr

    const char *ptr 表示的是指向常量的指针,不能通过该指针去修改指针所指向地址中的内容,但是可以修改该指针的指向。 可以通过其他普通指针对同样地址中的数据进行修改,测试例子如下:

    /**
     * @file test.c
     * @author Ailson Jack (jackailson@foxmail.com)
     * @brief
     * @version 1.0
     * @date 2022-12-04
     *
     * @copyright Copyright (c) 2022
     *
     */
    
    #include 
    
    int main(void)
    {
        char str[] = "Hello World!";
        char name[] = "Ailson Jack";
        const char *ptr = str;
        char *ptr_tmp = str;
    
        // 修改指针所指向地址中的内容
        printf("old str:%s\r\n", str);
        ptr[0] = 'A'; // 编译报错,不能通过该指针去修改指针所指向地址中的内容
        ptr_tmp[0] = 'J'; // 其他普通指针对同样地址中的数据进行修改
        printf("new str:%s\r\n", str);
    
        // 修改指针的指向
        printf("old ptr:%s\r\n", ptr);
        ptr = name; // 可以修改该指针的指向
        printf("new ptr:%s\r\n", ptr);
    
        return 0;
    }
    
    • 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

    编译测试程序:

    gcc test.c -o test.exe
    
    • 1

    在这里插入图片描述
    gcc编译报错,提示对指向常量的指针的错误操作。

    屏蔽23行的代码 ptr[0] = 'A';,重新编译,运行结果如下:

    在这里插入图片描述

    2、char const *ptr

    char const *ptrconst char *ptr 等价。

    3、char * const ptr

    **char * const ptr 表示的是指针的指向不可以被修改,但是可以修改指针指向地址中的内容。**测试例子如下:

    /**
     * @file test.c
     * @author Ailson Jack (jackailson@foxmail.com)
     * @brief
     * @version 1.0
     * @date 2022-12-04
     *
     * @copyright Copyright (c) 2022
     *
     */
    
    #include 
    
    int main(void)
    {
        char str[] = "Hello World!";
        char name[] = "Ailson Jack";
        char * const ptr = str;
    
        // 修改指针所指向地址中的内容
        printf("old str:%s\r\n", str);
        ptr[0] = 'A'; // 可以修改指针指向地址中的内容
        printf("new str:%s\r\n", str);
    
        // 修改指针的指向
        printf("old ptr:%s\r\n", ptr);
        ptr = name; // 编译报错,指针的指向不可以被修改
        printf("new ptr:%s\r\n", ptr);
    
        return 0;
    }
    
    • 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

    编译测试程序:

    gcc test.c -o test.exe
    
    • 1

    在这里插入图片描述
    gcc编译报错,提示指针的指向不可以被修改。

    屏蔽27行的代码 ptr = name;,重新编译,运行结果如下:

    在这里插入图片描述

    4、总结

    const char *ptr 表示的是指向常量的指针,不能通过该指针去修改指针所指向地址中的内容,但是可以修改该指针的指向。

    char const *ptrconst char *ptr 等价。

    char * const ptr 表示的是指针的指向不可以被修改,但是可以修改指针指向地址中的内容。

    const放在*号前表示修饰的是指针指向的对象,const放在*号后表示修饰的是指针本身。

    根据上面章节的内容,下面的写法是什么意思应该比较简单吧:

    const char * const ptr;
    
    • 1

    表示的是ptr指针的指向不可以被修改,ptr指针所指向地址中的内容不可以被修改。

    欢迎关注博主的公众号(微信搜索公众号:嵌入式那些事),可以扫描下面的公众号二维码:

    在这里插入图片描述
    如果文中有什么问题欢迎指正,毕竟博主的水平有限。

    如果这篇文章对你有帮助,记得点赞和关注博主就行了^_^。

    排版更好的内容见我博客的地址:http://www.only2fire.com/archives/150.html

    注:转载请注明出处,谢谢!^_^

  • 相关阅读:
    力扣labuladong一刷day3共4题
    流媒体直播播放协议:HLS、RTMP、HTTP-FLV
    C++ 内存模型 Memory Model
    【机器学习】重塑汽车设计与制造:实例与代码探索
    QT万年历
    VUE 笔记 基础语法篇
    Alexa智能家居构建技能教程(官网版翻译=保姆级)
    存储模型:大端和小端
    前端技能树,面试复习第 54 天—— 手写代码:情景题
    为什么 Go for-range 的 value 值地址每次都一样?
  • 原文地址:https://blog.csdn.net/jackailson/article/details/128174950