如何使用指针迭代结构数组中的数组

时间:2018-06-14 22:56:53

标签: c++ arrays pointers

我给了一个结构:

struct Agency {
    char name[255];
    int zip[5];
    RentalCar inventory[5];     // array of RentalCar objects
};

我需要从文件中检索数据以填充3个Agency对象的数组。 要设置清单数组中第一个项目的值很简单,

Agency ag[3];
for (int i = 0; i < 3; i++) {
ag->inventory->setWhatever();
ag++;     // easy to iterate through this array
}

但是,在代理商阵列中遍历库存数组并不容易。

inventory++;        // doesn't know what object this is associated with
ag->inventory++;    // also doesn't work

1 个答案:

答案 0 :(得分:2)

Agency ag[3];
Agency *ag_ptr= &ag[0]; // or: Agency *ag_ptr = ag; //as this decays to pointer
for (int i = 0; i < 3; i++) {
    Rentalcar *rental_ptr = ag_ptr->inventory; //rental_ptr now points at the first RentalCar
    rental_ptr->setWhatever(); //set first rental car
    rental_ptr++;
    rental_ptr->setWhatever(); //set second rental car
    ag_ptr++;
}

可以通过索引访问数组,例如ag[0] ag[1] ag[2],但这是非法的:ag++。当单独使用时,数组名ag衰减指向第一个元素,但它不是指针。

另一方面,指针可以使用+和 - 操作滚动内存地址。要小心,因为他们可以轻松指向不为你的程序保留的内存。