2014-09-25 119 views
-4

說我有下面的代碼我爲什麼不能增加該值

int const *p = new int(5); 
printf("%d",(*p)++); 

現在它說,

error C3892: 'p' : you cannot assign to a variable that is const

爲什麼會出現這個錯誤?我明白,p是一個常量,但我只是試圖打印(* p)++,它是6不會增加p指向的地址中的內容。任何人都可以向我解釋究竟發生了什麼?

+0

只讀變量不可分配 – P0W 2014-09-25 05:02:23

+0

您正在遞增的內容不是指針... – 2014-09-25 05:03:50

回答

5

操作(*p)++在語法上等同於(*p) += 1。也就是說,它試圖對原始變量進行賦值。編譯器抱怨,因爲你不允許修改const變量。

在這種情況下,您聲明p是指向const而不是const指針的指針。

相反,嘗試printf("%d", (*p)+1);

或者,你可以聲明p作爲const指針:int * const p,但這樣會增加值由p指向。

+0

標記爲答案謝謝 – Rajeshwar 2014-09-25 05:07:23

3

變化這樣說:

int* const p = new int(5); 

這意味着指針是恆定的。

int const *p = new int(5); 

這意味着指針指向的是常量。

如果你這樣做的第一種方法,那麼你可以增加指針指向的值。

(* p)++取消引用指針並遞增值。所以你應該以我發佈的第一種方式。