0

在 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
4

2 回答 2

3

在这样的表达中

*(++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;
于 2012-04-05T06:17:47.123 回答
0

数组和指针是相似的,但这是不同的地方。

如果要遍历数组,请使用单独的指针变量:

int j[] = { 0, 1, 2};    
int* jp = j;

jp然后指向 的第一个元素j。然后:

*(++jp) = 4;

将工作。

于 2012-04-05T05:15:12.940 回答