我知道即使我通过输入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;
}
}
}
答案 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;
}
}
}