在 C++ 中以下是有效的
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++ 中以下是有效的
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
在这样的表达中
*(++j)=4;//invalid.. lvalue required as increment operand
j
这是一个数组 int[3] “衰减”到指向该数组第一个元素的指针。该指针是一个右值,不能被赋值,因此你不能做类似*(++j)
.
在您的另一个示例p
中,是一个非常量且可以分配的指针:
int *p = new int[3];
*p=0;
*(++p)=1;
您使用右值获得的行为类似于使用 const 指针会发生的行为:
int const *p = new int[3];
*p=0;
*(++p)=1;
数组和指针是相似的,但这是不同的地方。
如果要遍历数组,请使用单独的指针变量:
int j[] = { 0, 1, 2};
int* jp = j;
jp
然后指向 的第一个元素j
。然后:
*(++jp) = 4;
将工作。