#include <stdio.h>
int main()
{
const int marbles[10] = { 1,2,3,4,5,6,7,8,9,10 };
int *ptr = marbles;
*ptr = 100;
printf("%d \n", marbles[0]); // output is "100"
}
我使用const
来保护数组。所以我认为int *ptr = marbles
会导致错误。否则通过使用指针,它将使用户能够更改数组中的数据。但令人惊讶的是,产量是&#34; 100&#34;。当我使用const
时,不是C想要保护数组免受任何方法的影响吗?
答案 0 :(得分:3)
当我尝试编译程序时,它显示了此警告。所以我想当你初始化指针时,const
关键字会失效。
In function ‘main’:
try.c:6:16: warning: **initialization discards ‘const’ qualifier from pointer** target type [enabled by default]
int *ptr = marbles;
答案 1 :(得分:2)
所以我认为
int *ptr = marbles
会导致错误。
这是一个“错误”。 C语言认为这个初始化是一个约束违规,这就是我们通常所说的“错误”。
编译器需要发出诊断消息以响应约束违规,这正是它在您的情况下所做的。
通常情况下,您有责任分析编译器发出的诊断消息,并找出哪些是“无辜的”并指出严重错误。