为什么指针不递增
why isn't the pointer incrementing
作为 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[++
将目标柱移动到列表中的第一项 因此,您使用数组中的下一项作为凝视点。即有你的问题。做一个或另一个。
相关文章:
- 为什么使用 "this" 指针调用派生成员函数?
- 为什么++(*p)更改指针值
- C++取消引用指针.为什么会发生变化
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- 为什么指针不写入类的地址?
- 为什么我们要为avl树实现返回一个指向节点的指针,而不是void函数
- 非类型指针和引用模板参数,以及在编译时如何/为什么解析它们.c++
- 为什么要增加导致崩溃的指针
- 为什么C++对链表中的下一个节点使用指针,而像 C# 或 Java 这样的语言只使用类 Node 的名称?
- 为什么会出现 gettnig 运行时错误:加载类型为"_Bit_type"(stl_bvector.h) 的空指针?
- 为什么 vector 的随机访问迭代器给出与指针不同的内存地址?
- 共享指针:为什么没有双免费
- 指向2D数组的指针(为什么起作用)
- 函数指针 - 为什么,什么时候我可以没有
- C++ 函数指针 -- 为什么会这样
- 不支持在c或c++中添加两个指针.为什么?
- 无效的指针-为什么
- 模板基类可以存储指向派生但不能存储对象的指针 - 为什么
- 在信号代码中将整数转换为函数指针-为什么这样做?
- 指向结构体作为函数参数的指针-为什么不更新其值