2017-09-15 78 views
0

我是C++语言的新手,我不知道指针及其用法。我面对错误"[Error] invalid conversion from 'int' to 'int*' [-fpermissive]"而行编译:无法从'int'转换为'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; 
} 
+1

请不要垃圾邮件语言标签。你的代码不是C,而是C++,它是一种不同的语言。 – Gerhardh

回答

0

这里midd(int arr[10],int size);类型为int期待*,你试图传递int值(AX [10]这也是错误:斧头只有10个元素,并尝试使用11日),和编译器不能转换intint*如此它显示“[错误]从'int'无效转换为'int *'[-fpermissive]”。

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

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

    - 现在指针斧(int*)穿过,从而midd()会接受它。

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 *

+0

我写了另一个与阵列大多相同的传球 ,不需要指针传递,所以为什么剂量这个? – drainzerrr

+0

@drainzerrr;没有得到你? – haccks

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; 
} 
+0

@Bob__最新的编辑没有反映在答案中。感谢您指出。 – Shreevardhan

相关问题