ai didi

关于 C 中字符指针的困惑

转载 作者:太空狗 更新时间:2023-10-29 14:50:40 24 4
gpt4 key购买 nike

C 中的字符指针让我感到困惑。

假设我们有一个字符指针,它指向字符串常量的第一个字符。

char *a="ABCD";

然后我们不能使用指针 a 更改该字符的值,因为以下语句会导致段错误。

*a='X';

现在假设我们有一个 char 指针,它指向一个字符常量

const char B='X';    
char *ptr=&B;

然后我们可以使用语句更改该字符的值

*ptr='Z';

我的问题是,这是证明 C 不健壮的未定义行为的情况吗?还是有更深层次的逻辑?

最佳答案

假设 C 让您很容易搬起石头砸自己的脚。修改 B 仍然是未定义的行为,就像修改 *a 一样,因为 B 已被声明为 const

为了解决这个问题,打开警告(你应该总是这样做,除非在非常特殊的情况下)会在 GCC 上显示以下内容:

warning: initialization discards 'const' qualifier from pointer
target type [-Wdiscarded-qualifiers]

关于关于 C 中字符指针的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30943909/

24 4 0
文章推荐: android - setAndAllowWhileIdle 和 setExactAndAllowWhileIdle 的区别
文章推荐: c - 如何检查 argv[count] 是否为整数
文章推荐: c - 为什么 C 有这么多不同的类型?
文章推荐: android - 有没有办法同时拥有多个录音机?
太空狗
个人简介

我是一名优秀的程序员,十分优秀!

滴滴打车优惠券免费领取
滴滴打车优惠券
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com