gpt4 book ai didi

c - const : what's allowed and whats not? 的规则

转载 作者:行者123 更新时间:2023-11-30 18:31:37 26 4
gpt4 key购买 nike

我发现 c 中的 const 规则非常令人困惑。我想知道在处理 const/指向 const 的指针时是否存在已知规则或方法来了解允许执行哪些操作。

我举个例子:

不允许:

const int b=3;

int * const a=&b;

允许:

int b=3;

int * const a=&b;

在编译之前是否需要了解包含 const 的代码能否编译的规则?我想到的一件事是——我想知道这是否是一个规则——每次你用 const 写一行时,后面是否总是需要进行初始化?我知道有一些关于 const 可以/不能容纳什么的规则。

最佳答案

您的问题实际上并不在于 const 本身,而是无法理解变量所包含的内容。

将某些内容声明为const意味着该值不会改变。所以:

const int b=3;

现在b持有3并且你不能给它分配其他东西,因为它是常量。对于指针也是如此:

int b=3;
int * const a=&b;

指针a现在指向b的地址,您现在不能在那里分配不同的地址。原因是这样的:

const int b=3;
int * const a=&b;

不起作用是因为a是指向(非常量)int的常量指针。然而,您正在尝试为 a 分配常量 int 的值。所以编译器说“不”。

const int b=3;
const int * a=&b;

此更改现在允许它工作,因为 a 是一个指向常量 int 的指针,这就是 b ,因此可以进行赋值。如果您希望 ab 都保持不变,则需要编写第二行:

const int * const a=&b;

您遇到了 spiral rule 的问题.

关于c - const : what's allowed and whats not? 的规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21440681/

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