我的代码:
#include <stdio.h>
main()
{
const int x = 10;
int *p;
p=&x;
*p=20;
printf("Value at p: %d \n",*p);
printf("Value at x: %d", x);
}
我得到的输出是:
p:20的价值 价值在x:20
因此,改变常量变量的值。这是使用指针的缺点之一吗?
答案 0 :(得分:2)
您使用int*
指向const
int。你应该得到:
error: invalid conversion from ‘const int*’ to ‘int*’
当你这样做时:
p = &x;
你可能需要更新你的编译器,一个体面的编译器应该告诉你这个错误或至少给你警告。
答案 1 :(得分:0)
请检查以下错误消息:
error: invalid conversion from ‘const int*’ to ‘int*’
const int
,int const
,const int *
,int const *
,请参阅此帖:const int = int const?
这就是你如何使用它。
答案 2 :(得分:0)
那是因为您以错误的方式使用C语言,编译器允许您编译此代码,同时仅提供警告
warning: assignment discards ‘const’ qualifier from pointer target type [enabled by default]
在SO上有答案,例如warning: assignment discards qualifiers from pointer target type
答案 3 :(得分:0)
任何体面的编译器都会告诉您丢弃const限定符。
C假设程序员总是正确的,因此您可以选择忽略编译器的警告。像往常一样,只要你知道自己在做什么,这不是一个缺点!
答案 4 :(得分:0)
正如其他答案所指出的那样,编写一个程序来尝试修改const
限定变量,这会导致程序具有未定义的行为。这意味着你的程序可以做任何事情 - 作为一个例子,当我编译启用了优化的程序时,我看到了这个输出:
Value at p: 20
Value at x: 10
..如果我将static
限定符添加到变量x
,那么程序会在运行时崩溃。