2013-05-06 59 views
1

我的代码:为什么我能够改变这里用const int的价值?

#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

因此,恒定的变量的值被改变。这是使用指针的缺点之一吗?

+1

C不会阻止你做这样愚蠢的事。你得到来自编译器警告,虽然:'const.c:9:警告:分配丢弃了指针目标type' – MatthewD 2013-05-06 01:33:24

+0

'的#include“stdio.h中”'=>'#包括预选赛'注意 – Elazar 2013-05-06 01:36:23

+0

这取决于编译器和优化已启用,您可以在输出中获得“Value at x:10”。 – fbafelipe 2013-05-06 01:49:36

回答

0

请查看以下错误消息:

error: invalid conversion from ‘const int*’ to ‘int*’

const intint constconst int *int const *,请看到这个帖子:const int = int const?

这只是你如何使用它。

2

您使用的int*指向一个const INT。你应该:

error: invalid conversion from ‘const int*’ to ‘int*’ 

当你这样做:

p = &x; 

你可能需要更新您的编译器,一个体面的编译器应该告诉你这个错误,或者至少给你警告这一点。

+0

但他没有,因为他使用了一个糟糕的编译器,我想。 – Elazar 2013-05-06 01:35:08

+0

@Elazar我想是的。或者可能是旧的版本编译器 – taocp 2013-05-06 01:35:27

+0

我使用gcc!我认为gcc足够好了! – user2350631 2013-05-06 01:38:15

0

任何像样的编译器会告诉你,你被抛弃const属性。

ç假定程序员永远是对的,因此,它是你的选择忽略编译器的警告或不。像往常一样,只要你知道你在做什么,这不是一个缺点!

0

正如其他答案已经注意到,编写一个程序,试图修改const这样的限定变量导致程序有未定义的行为。这意味着您的程序可以做任何事情 - 作为这方面的一个例子,当我启用的优化编译程序,我看到这样的输出:

Value at p: 20 
Value at x: 10 

..和如果我的static限定符添加到变量x然后该程序在运行时崩溃。

相关问题