将指向 int 数组的指针作为参数传递C++

Passing a pointer to an int array, as an argument C++

本文关键字:参数传递 C++ 指针 int 数组      更新时间:2023-10-16

我知道即使我通过键入arrayname作为参数来传递数组(例如:getArrayInput(arrayexample); ),它只会复制第一个元素的地址值而不是整个数组,但我仍然想知道为什么这些代码会出错。我知道这不是它应该如何实现的方式,但我想了解这个错误。

main.cpp|13|error: 无法将参数 '1' 的 'int*' 转换为 'int**' 到 'void getArrayInput(int**)'|

#include <iostream>
using namespace std;
void getArrayInput(int * []);
int main()
{
    cout<<"Enter scores on by one.." << endl;
    cout<<"To terminate input enter -1"<<endl;
    int listof[10]={};
    int *ptScores =listof;
    getArrayInput(ptScores);


    return 0;
}
void getArrayInput(int * []){
    for(int i=0;i<10;i++){
        cin>>*(pt+i);
        if(*(pt+i))=-1){
            break;
        }
        else{
            cout<<"Enter next.."<<endl;
        }
    }
}

这是因为

int * 

int[] 

都是类型

int *

因此,您在这里要求

int **.

尝试更换

void getArrayInput(int * []) by     void getArrayInput(int *)

在 C 中,数组衰减为指针。在某些情况下,它们是可以互换的。

ptScores的类型为 int*(指向 int 的指针)。 getArrayInput需要一个int*[](指向 int 的指针数组)。 int*[]衰减为int**(指针到指向整数的指针)。

该错误表示您正在为期望int**(getArrayInput)的东西提供int*(ptScores)。


你如何解决这个问题?拿一个int*.

void getArrayInput(int* pt){
    for(int i=0;i<10;i++){
        cin>>pt[i];
        if(pt[i]=-1){
            break;
        }
        else{
            cout<<"Enter next.."<<endl;
        }
    }
}