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 <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 *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 <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 *ptrconst char *ptr 等价。

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

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

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

const char * const ptr;

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

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

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

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

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

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

  • 22
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jackailson

你的鼓励是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值