2013-12-14 144 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'更改爲常量。