【发布时间】:2023-04-01 02:31:01
【问题描述】:
C 中的字符指针让我很困惑。
假设我们有一个 char 指针,它指向字符串 constant 的第一个字符。
char *a="ABCD";
那么我们不能使用指针 a 改变那个字符的值,因为下面的语句会导致分段错误。
*a='X';
现在假设我们有一个 char 指针,它指向一个字符常量。
const char B='X';
char *ptr=&B;
然后我们可以使用语句更改该字符的值
*ptr='Z';
我的问题是,这是证明 C 不健壮的未定义行为的情况吗?还是涉及到更深层次的逻辑?
【问题讨论】:
-
@EugeniuRosca 你的意思是
char const *a = "ABCD"。它们没有相同的语义。 -
const 表示内存是只读的。时期。不允许通过另一个指针引用它来更改它 - 这会产生编译器警告。