传递数组时从 'int' 到 'int*' [-fallowive] 的转换无效

invalid conversion from 'int' to 'int*' [-fpermissive] on passing array

本文关键字:int -fallowive 转换 无效 数组      更新时间:2023-10-16

我是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;
}

在这里 midd(int arr[10],int size);正在期望int*,而您正在尝试传递int值(ax [10],这也是错误:ax只有10个元素,您尝试使用11th)和编译器无法将int转换为int*,因此它显示" [错误]从'int'到'int*'[-fpermissive]"。

要使此程序正确,您必须进行此更改。

  • cout<< midd (ax, asize );

    替换 cout<< midd (ax[10], asize );

    - 通过AX(int*)的NOW指针,因此midd()将接受它。

更改函数调用

cout << midd(ax, asize) << endl;

和声明

double midd(int arr[], int size) { ... }

或转到C 方式:std::vectorstd::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;
}

您需要将指针传递给数组的第一个元素。将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 *