2013-12-14 27 views
-1

常量指针对于const int *ptr
你不能改变指向的值由PTR混淆使用C

int main() 
{ 
    const int *p; 
    int a=5; 
    p=&a; 
    printf("%d",++(*p)); 
} 

上述程序抛出我的错误。这是公平的。

但为什么下面的代码不会给我错误。

int main() 
{ 
    const int const *p; 
    int a=5; 
    p=&a; 
    a=100; // changing the content pointed by the constant pointer 

    printf("%d",(*p)); 
} 

我改变了const指针指向的值。即我将var a的值从 5改为100?

+0

是的。 'a'限定为'const'?诺。那么问题是什么?你是否试图通过指向'const'的指针来改变它?不。然后? – 2013-12-14 05:52:33

回答

1

声明a = 100;意味着你正在使用变量a改变值为100,这不是一个常量。所以你将能够改变a的值。

但是,如果你会尝试下面的代码运行:

int main() 
{ 
     const int const *p; 
     int a=5; 
     p=&a; 
     *p=100; 
//  a=100; 
     printf("(*p)=%d",(*p)); 
     return 0; 
} 

因为使用指针,你要改变值指向只读位置,这会给你的错误。因为你已经在指针位置声明了值是不变的。

这里a和p是2个不同的变量,它们有它们自己的属性。

0

变量'a'不是常量,因此您可以更改它的值。 const int a = 5;不能改变。

变量'p'指向'a'的值,但不会将变量'a'更改为常量。