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 <stdio.h>
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;
}
编译测试程序:
gcc test.c -o test.exe

 gcc编译报错,提示对指向常量的指针的错误操作。
屏蔽23行的代码 ptr[0] = 'A';,重新编译,运行结果如下:

2、char const *ptr
char const *ptr 和 const 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 <stdio.h>
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;
}
编译测试程序:
gcc test.c -o test.exe

 gcc编译报错,提示指针的指向不可以被修改。
屏蔽27行的代码 ptr = name;,重新编译,运行结果如下:

4、总结
const char *ptr 表示的是指向常量的指针,不能通过该指针去修改指针所指向地址中的内容,但是可以修改该指针的指向。
char const *ptr 和 const char *ptr 等价。
char * const ptr 表示的是指针的指向不可以被修改,但是可以修改指针指向地址中的内容。
const放在*号前表示修饰的是指针指向的对象,const放在*号后表示修饰的是指针本身。
根据上面章节的内容,下面的写法是什么意思应该比较简单吧:
const char * const ptr;
表示的是ptr指针的指向不可以被修改,ptr指针所指向地址中的内容不可以被修改。
欢迎关注博主的公众号呀(微信搜索公众号:嵌入式那些事),可以扫描下面的公众号二维码(为防止公众号二维码被CSDN处理掉,二维码图片周围加了些东西,如果公众号图片真被CSDN处理了,也可以直接访问我的个人博客文章获取公众号二维码图片):

 如果文中有什么问题欢迎指正,毕竟博主的水平有限。
如果这篇文章对你有帮助,记得点赞和关注博主就行了^_^。
排版更好的内容见我博客的地址:http://www.only2fire.com/archives/150.html
注:转载请注明出处,谢谢!^_^







![[附源码]Python计算机毕业设计Django汽车租赁管理系统](https://img-blog.csdnimg.cn/0331c370a7234ab093e85295dae75ce2.png)











