将指针传递给int数组,作为参数C ++

时间:2017-01-11 08:15:26

标签: c++ arrays function pointers arguments

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

  

main.cpp | 13 |错误:无法将参数'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;
        }
    }
}

2 个答案:

答案 0 :(得分:3)

这是因为

int * 

int[] 

都是

类型
int *

因此,你在这里要求

int **.

尝试替换

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

答案 1 :(得分:2)

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

ptScores的类型为int*(指向int的指针)。 getArrayInput期望int*[](指向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;
        }
    }
}