在C++中以下是有效C++陣列VS指針
int *p = new int[3];
*p=0;
*(++p)=1;
另外以下是有效
int j[] = { 0, 1, 2};
*j = 3;
鑑於,* J = 3部作品,爲什麼以下無效
*(++j)=4;//invalid.. lvalue required as increment operand
在C++中以下是有效C++陣列VS指針
int *p = new int[3];
*p=0;
*(++p)=1;
另外以下是有效
int j[] = { 0, 1, 2};
*j = 3;
鑑於,* J = 3部作品,爲什麼以下無效
*(++j)=4;//invalid.. lvalue required as increment operand
陣列和指針是相似的,但這是一個地方,他們不是。
如果要遍歷一個數組,使用一個單獨的指針變量:
int j[] = { 0, 1, 2};
int* jp = j;
jp
然後指向的j
第一個元素。然後:
*(++jp) = 4;
將工作。
在表達這樣
*(++j)=4;//invalid.. lvalue required as increment operand
j
這是一個數組INT [3]「衰變」的指針數組的第一個元素。該指針是一個右值,並且不能分配,因此您不能執行諸如*(++j)
之類的操作。
在其他範例p
是一個指針,它是非常量和可分配:
int *p = new int[3];
*p=0;
*(++p)=1;
你的右值獲得的行爲類似於將一個常量指針發生什麼:
int const *p = new int[3];
*p=0;
*(++p)=1;
我認爲你和低調的答案一樣犯了同樣的錯誤。 'j'是一個數組,你不能增加數組。 – 2012-04-05 06:34:18
'j'衰減到一個指針,但它不像'const'那樣是常量,它只是一個_rvalue_。非類型的_rvalues_永遠不是'const'。 – 2012-04-05 06:35:39
@Charles Bailey:好的,我糾正了。這是更好嗎? – 2012-04-05 07:01:31
'j'是常數指針,用於啓動數組 – turbanoff 2012-04-05 05:14:57
@turbanoff:否,'j'是一個數組類型,不是指針類型。 – dreamlax 2012-04-05 05:29:00
注意'*(j + 1)'沒問題,因爲你並不是試圖修改'j'本身。 – 2012-04-05 05:31:31