通过指针修改常量数据

时间:2016-10-31 23:06:22

标签: c pointers const

我已经读过以下代码无效并且应该发出错误:

double rates[5] = {88.99, 100.12, 59.45, 183.11, 340.5};
const double locked[4] = {0.08, 0.075, 0.0725, 0.07};
double * pnc = rates; // valid
pnc = locked; // not valid
pnc = &rates[3]; // valid

pnc是指针加倍,用户无法通过它更改数据。虽然,我编译了程序添加这段代码:

printf("%f\n", *pnc);   
*pnc = 1000.0;
printf("%f\n", *pnc);

Visual Studio社区给了我警告C4090(不同的' const'限定符),但执行没有问题。当我运行程序时,输出如下所示:

0.080000
1000.000000

为什么即使必须禁止它也能这样做?

1 个答案:

答案 0 :(得分:1)

const限定符只是为了防止编译(或者至少创建一个警告),如果dev修改了一个在程序逻辑中应该是常量的元素。事实上,一旦编译完成,几乎在所有情况下,const或非const,生成的程序都是相同的。

这里有一个警告,但因为你是一个疯狂的开发者(我们有时都疯了),你忽略了它。

如果你愿意,你甚至可以做

pnc = (double *)locked;

更新:您可以查看此链接以获取更多详细信息。它也谈论C ++,但它非常有趣:) http://www.gotw.ca/gotw/081.htm