c ++指针/数组的区别

时间:2012-03-05 09:37:59

标签: c++ arrays pointers

我正在练习c ++期中考试,我不明白为什么以下代码不正确。

int ip[] = {6, 7, 2, 4, -5};
for (int i = 0; i < 5; ++i, ++ip)
    cout << *ip;

我的怀疑是它与-5有关,但我迷路了,我真的想解决这个问题。

8 个答案:

答案 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)

原因是:

  1. 当涉及到数组ip[]时,ip指向第一个元素 数组,它是固定的,它不能改变(它就像一个 常量指针,即指向固定的内存位置。)

    2.所以当你递增它时,你违反的条件是你收到错误的原因

  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 ++中,[]没有为数组类型定义,仅适用于 指针(或用于具有用户定义的重载的类型)。它只适用于 数组因为隐式转换。