C++ 数组与指针

c++ arrays vs pointers

本文关键字:指针 数组 C++      更新时间:2023-10-16

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

使用右值获得的行为类似于使用常量指针发生的行为:

 int const *p = new int[3];
 *p=0;
 *(++p)=1;
数组

和指针是相似的,但这是一个不同的地方。

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

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

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

*(++jp) = 4;

会工作。