在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