【发布时间】:2018-01-28 06:13:29
【问题描述】:
这段代码我已经写好了
#include <stdio.h>
int main() {
int b = 15;
const int *foo = &b;
//b = 20;
*foo = 20;
printf("%d", *foo);
return 0;
}
这意味着foo 指向的位置不能改变。这意味着 b 无法更改。但是当我取消注释b = 20 时。它没有显示任何错误,我得到了输出 20 。在这段代码中,我收到此错误
main.c: In function 'main':
main.c:15:10: error: assignment of read-only location '*foo'
*foo = 20;
如果*foo即b是只读位置,为什么我可以更改它的值b = 20?
【问题讨论】:
-
看看this answer,我相信它会帮助你理解它为什么会这样做
-
您不能使用
foo来更改它所指向的内容。没有什么可以阻止您更改其他合法机制所指向的内容。使用b是修改foo指向的位置的合法机制。 -
请阅读整个问题!
-
@PradeepKumar 是否堆栈段有写保护区域?如果是这样,它将需要典型堆栈帧的许多碎片区域(在某些实现中)。我的理解是它是对编译器的指令。