为什么指针不递增

why isn't the pointer incrementing

本文关键字:指针 为什么      更新时间:2023-10-16

作为 c++ 的新手,我一直在练习问题。我编写的一个程序包括结构和数组的使用:

#include <iostream>
using namespace std;
int main (void){
struct CandyBar{
    char brandName[200];
    float weight;
    int calories;
};
CandyBar snacks[3] = {
    {"Cadbury's Flake",23.5,49},
    {"Cadbury's Wispa",49.3,29},
    {"Cadbury's Picnic",57.8,49},
};
for(int i=0;i<3;i++){
    cout << "Brand Name: " << snacks[i].brandName << endl;
    cout << "Weight: " << snacks[i].weight << endl;
    cout << "Calories: " << snacks[i].calories << endl;
    snacks++;
}
cin.get();
return 0;
}

上面的程序因为"零食++"而失败,但我不明白为什么。据我了解,数组由指针("零食")和对象([])两部分组成,那么"零食++"不应该在我增加指针时工作吗?

谢谢担

只需删除snacks++;
您已经在使用变量 i 作为数组中的索引。

如果确实要使用指针算法:
A. 您应该定义一个指向数组开头的指针并使用它,而不是使用数组。
b.访问数据时,应使用指针而不是带有索引i的数组。

struct CandyBar* ptr = snacks;
for(int i=0;i<3;i++){
    cout << "Brand Name: " << ptr->brandName << endl;
    cout << "Weight: " << ptr->weight << endl;
    cout << "Calories: " << ptr->calories << endl;
    ptr++;
}

snacks不是指针。它的类型是 CandyBar[3] 不是 CandyBar* .但是,数组转换为指针非常简单:

CandyBar* snackIterator = snacks;

(你应该清楚你使用指针的目的是什么:有很多用途使它们有些混乱)。

虽然可以使用数组作为指针,但它不是编译器中的指针。因此,您无法更改snacks变量。如果允许您更改"指针",它将不再"指向"循环后数组的开头,而是指向数组之外的未初始化内存的条目。

此外,您无需更改 snacks 变量,snacks[i]已经为您获取了正确的值。

您无法更改 snacks 的值。您应该使用指针而不是 snacks

而且,在增加i的情况下,您无需增加指针。

>snakes作为列表中的第一项开始。您可以使用snacks[[i]为该列表编制索引。但是,您也可以使用snacks[++将目标柱移动到列表中的第一项 因此,您使用数组中的下一项作为凝视点。即有你的问题。做一个或另一个。