gpt4 book ai didi

c - 分配给 const int *

转载 作者:行者123 更新时间:2023-12-04 12:18:11 24 4
gpt4 key购买 nike

void main()
{
const int * a;
*a = 5;
}

gcc 错误:分配只读位置。

那么,如何在不使用其他变量的情况下分配给 *a?像上面这样的声明有什么用途?

最佳答案

const int * a;

从右到左阅读声明。[见注释] 你得到了什么? a 是一个 * 即指向 int 的指针 即一个整数 const 即一个常量。简而言之,变量 a 指向一个您无法更改其值的整数。至少,不是通过 a。 pointee 是否真的是不可变的是另一个问题。但事实仍然是,您不能使用 a 来修改 *a;

const 是您对自己的 promise :我永远不会尝试使用指向 const 的指针来修改指针对象。编译器只给你支持。

如果您真的想要写给指针对象,您需要一个非常量指针,例如:

int *a;
*a = 42; /* this is fine */

还有来自 bortzmeyer 的非常好的评论: (我想我会跳过这个以保持简单:)

You can also put the const after the * (as you said, declarations should be read from right to left).

他的意思是这样的:

const int *a;

没有什么不同

int const *a;

(还记得从右到左的阅读规则吗?)但与:

int * const p;

阅读它,我们得到:pconst(-ant) *(pointer) to int(-eger)。翻译:一旦你将 p 设置为指向一个整数,你就不能重新设置它(即写入它以使其指向另一个整数 - 使 p 常量的意义), 但你可以非常写给指针对象(指针对象不是常数)。

注意: 对于迂腐倾向这里是来自 Darron 的“规则” :

“声明应从右向左阅读”是一种简化——如果有括号,则应从内向外阅读。除非括号表示函数调用。真正的规则是“把它当作一个表达式;如果我应用这些运算符,我最终会得到这个简单的类型”。

如果没有 bortzmeyerDarron,这个答案真的会少得多 - 谢谢!

PPS:(我保证这将是最后一次编辑。好吧,希望如此!)

void main() 不是 C 或 C++ 中 main 的标准签名。在您了解自己或(更重要的是)您的代码永远不必去另一个宇宙之前不要使用它。

关于c - 分配给 const int *,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/594321/

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