• 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

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

  • 相关阅读:
    RuntimeError: Error compiling objects for extension手把手带你解决(超详细)
    [python 刷题] 128 Longest Consecutive Sequence
    GBASE 8s 自定义存储过程和函数使用
    在线问题反馈模块实战(二十一):完结篇
    SQLite SQL教程之如何实现contains函数,left join 判断一个字符串包含另外一个(教程含源码)
    OpenSSL 密码库实现证书签发流程详解
    Sheet.JS 在Vue-cli中使用
    Kubernetes学习大纲
    vue数据代理、劫持、监视(实现响应式)
    nodejs+vue+elementui毕业设计选题系统express vscode
  • 原文地址:https://blog.csdn.net/jackailson/article/details/128174950