gpt4 book ai didi

c - 在 c 中将 const 与指针一起使用

转载 作者:行者123 更新时间:2023-12-02 05:20:56 25 4
gpt4 key购买 nike

我不明白为什么下面的代码可以工作

typedef struct {
double x;
double y;
double z;
} abc;

static void test(abc const* b)
{
(void)memset((void *)&(b->x), 0, sizeof(double));
}

int main(int argc, char *argv[])
{
abc blah = {11, 12, 23};

printf("\n%f - %f - %f\n", blah.x, blah.y, blah.z);
test(&blah);
printf("\n%f - %f - %f\n", blah.x, blah.y, blah.z);
while (1);
}

在函数测试中,我将 b 设置为指向 const 值的指针。然而,我能够更改 x 的值。

最佳答案

您正在使用强制转换来破解传递到 test 的指针的 const 上下文,因此您的操作在编译时被允许。

blah.x 实际上是可变的,所以没有什么是未定义的。这真是糟糕的风格。

如果对象本身是 const,您的程序的行为将是未定义的:

[C99: 6.7.3/5]: If an attempt is made to modify an object defined with a const-qualified type through use of an lvalue with non-const-qualified type, the behavior is undefined. If an attempt is made to refer to an object defined with a volatile-qualified type through use of an lvalue with non-volatile-qualified type, the behavior is undefined.

但是,为该对象创建一个 const 限定的句柄不会使该对象成为 const;这仅意味着您无法(在编译时)通过该句柄对其进行变异,除非您像此处那样破解 constness。

关于c - 在 c 中将 const 与指针一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34136707/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com