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

时间:2017-09-15 05:46:29

标签: c++ arrays function

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

3 个答案:

答案 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::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;
}