我是C ++语言的新手,我不知道指针及其用法。我在排队时遇到错误"[Error] invalid conversion from 'int' to 'int*' [-fpermissive]"
:
cout << midd (ax [10], asize) << endl;
这是代码:
#include <iostream>
using namespace std;
double midd(int arr[10], int size);
int main() {
int ax[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int asize = 10;
cout << midd(ax[10], asize) << endl;
}
double midd(int arr[10], int size) {
int acount = 0;
int mid1;
int mid2;
int amid = size / 2;
double mid = 0.0;
while (acount < 10) {
if (acount == amid) {
mid1 = arr[acount];
}
else if (acount == (mid + 1)) {
mid2 = arr[acount];
}
++acount;
}
mid = (mid1 + mid2) / 2.0;
return mid;
}
答案 0 :(得分:1)
这里midd(int arr[10],int size);
期待int *并且你试图传递int值(ax [10]也是ERROR:ax只有10个元素,你尝试使用第11个),编译器无法转换{ {1}}到int
所以它显示“[错误]从'int'无效转换为'int *'[-fpermissive]”。
要使此程序正确,您必须进行此更改。
将int*
替换为cout<< midd (ax[10], asize );
- 传递ax(cout<< midd (ax, asize );
)的指针,以便int*
接受它。
答案 1 :(得分:0)
您需要将指针传递给数组的第一个元素。将midd (ax [10], asize )
更改为midd (ax, asize )
。
在功能签名
中double midd(int arr[10],int size);
参数int arr[10]
相当于int *arr
double midd(int *arr,int size);
因此,midd
期望其int *
类型的第一个参数。在函数调用midd (ax, asize )
中,ax
将衰减为int *
。
答案 2 :(得分:0)
更改功能调用
cout << midd(ax, asize) << endl;
和声明
double midd(int arr[], int size) { ... }
或采用C ++方式:std::vector
或std::array
。例如
#include <iostream>
#include <array>
using namespace std;
double midd(array<int, 10> a) {
int mid = a.size() / 2;
return (a[mid] + a[mid + 1]) / 2.0;
}
int main() {
array<int, 10> ax = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
cout << midd(ax) << endl;
}