为什么我的数据不受保护,即使我使用" const"在C?

时间:2016-08-08 04:05:19

标签: c arrays const

#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想要保护数组免受任何方法的影响吗?

2 个答案:

答案 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语言认为这个初始化是一个约束违规,这就是我们通常所说的“错误”。

编译器需要发出诊断消息以响应约束违规,这正是它在您的情况下所做的。

通常情况下,您有责任分析编译器发出的诊断消息,并找出哪些是“无辜的”并指出严重错误。