c++指针/数组的区别

c++ pointer/array distinction

本文关键字:区别 数组 指针 c++      更新时间:2023-10-16

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

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

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

不能增加ip,因为它是一个数组,而不是指针,所以它的值[ip]是固定的。

因此,问题在于表达式++ip

错误在于不能增加静态指针(也称为数组)的值。

简单的解决方案是简单地使用索引运算符[]

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

您可以使用索引直接访问这些元素:

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]

原因是:

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

    2.所以当你增加它时,你违反了条件,这就是为什么你会得到一个错误

试试这个

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

ip是一个静态数组。。你不能增加它!最终,您可以创建另一个指向ip:的指针

int* p = ip;

则递增CCD_ 10。

您需要分别增加数组ip[]的每个值

指针和数组是不同的东西。指针会衰减为数组,但它不会反过来工作。运算符++没有在数组上定义,因此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;
}

只是为了形式化其他人所说的:ip是一个数组,而不是指针。它隐式转换为指针,但隐式转换是一个右值,++运算符需要左值。除了隐式转换(根本不会发生上下文),数组和指针之间没有真正的关系。

还要注意,在C++中,[]不是为数组类型定义的,只是为指针(或用于具有用户定义的重载的类型)。它只适用于数组,因为隐式转换。