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

c++ arrays function

4754 观看

3回复

14 作者的声誉

我是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;
}
作者: drainzerrr 的来源 发布者: 2017 年 9 月 15 日

回应 3


0

88548 作者的声誉

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

作者: haccks 发布者: 2017 年 9 月 15 日

1

22 作者的声誉

决定

这里midd(int arr[10],int size);期望的是int *,并且您正在尝试传递int值(ax [10]也是ERROR:ax只有10个元素,并且您尝试使用11th),并且编译器无法转换int为,int*因此它显示“ [Error]无效从'int'转换为'int *'[-fpermissive]”。

为了使该程序正确,您必须进行此更改。

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

    -现在int*传递了ax()的指针,因此midd()将接受它。

作者: Piyush Sonani 发布者: 2017 年 9 月 15 日

0

8459 作者的声誉

更改函数调用

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;
}
作者: Shreevardhan 发布者: 2017 年 9 月 15 日
32x32