2017-09-15 88 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