我正在练习c ++期中考试,我不明白为什么以下代码不正确。
int ip[] = {6, 7, 2, 4, -5};
for (int i = 0; i < 5; ++i, ++ip)
cout << *ip;
我的怀疑是它与-5有关,但我迷路了,我真的想解决这个问题。
答案 0 :(得分:3)
你不能增加ip
,因为它是一个数组,而不是指针 - 所以它的值[ip
]是固定的。
因此,问题在于表达式++ip
答案 1 :(得分:1)
错误是您无法增加静态指针(即数组)的值。
简单的解决方案是简单地使用索引操作符[]
。
int ip[] = {6, 7, 2, 4, -5};
for (int i = 0; i < 5; i++)
cout << ip[i];
答案 2 :(得分:1)
您可以使用index:
直接访问这些元素int ip[] = {6, 7, 2, 4, -5};
for (int i = 0; i < 5; ++i)
cout << ip[i];
或者如果你想为此目的使用指针算法,你可以使用临时变量 - 指向这个数组的第一个元素的指针:
int ip[] = {6, 7, 2, 4, -5};
int* myPtr = ip;
for (int i = 0; i < 5; ++i, ++myPtr)
cout << *myPtr;
请注意,int* myPtr = ip;
等于int* myPtr = &ip[0]
。
答案 3 :(得分:1)
原因是:
当涉及到数组ip[]
时,ip指向第一个元素
数组,它是固定的,它不能改变(它就像一个
常量指针,即指向固定的内存位置。)
2.所以当你递增它时,你违反的条件是你收到错误的原因
试试这个
int ip[] = {6, 7, 2, 4, -5};
for (int i = 0; i < 5; ++i)
cout << ip[i];
答案 4 :(得分:0)
ip
是一个静态数组..你无法增加它!
最终你可以创建另一个指向ip
的指针:
int* p = ip;
然后递增p
。
答案 5 :(得分:0)
你需要分别增加数组ip []的每个值
答案 6 :(得分:0)
指针和数组是不同的东西。 指针衰减到数组,但它不起作用。 operator ++没有在数组上定义,因此ip衰减到指针,指针(未命名的临时)递增,但你不能将它存储回ip,因为ip是一个数组。
下面的代码应该可以正常运行。
#include <iostream>
int main(){
int ip[] = {6, 7, 2, 4, -5};
int *p=ip;
for (int i = 0; i < 5; ++i, ++p)
std::cout << *p;
}
答案 7 :(得分:0)
只是为了形容其他人说的话:ip
是一个数组,而不是
一个指针。它隐式转换为指针,但结果为
隐式转换是一个右值,++
运算符需要一个
左值。除了隐式转换(不会发生所有转换)
上下文),数组和指针之间没有真正的关系。
另请注意,在C ++中,[]
没有为数组类型定义,仅适用于
指针(或用于具有用户定义的重载的类型)。它只适用于
数组因为隐式转换。