2016-04-11 20 views
-1

Bu, C++ öğrenirken üzerinde çalıştığım bir şeyin çalışma kodudur.
ArraySortToMedian() diziyi işlemek için dizi gösterimi yerine işaretçi gösterimini kullanması için bunu nasıl değiştirebilirim?C++ Dizilime göre dizgeyi geçirme

Şimdiye kadar yaptığım tüm girişimler işe yaramadı, dolayısıyla mantıksal ilişkide veya eksik olduğum sözdiziminde bir şey var. Şimdiden teşekkür ederim.

#include <iostream> 
#include <fstream> 

double ArraySortToMedian(int [], int); 

using namespace std; 

int main() 
{ 
    ifstream infile; 
    infile.open("numbers.txt"); 

    const int SIZE = 6; 
    int array[SIZE]; 
    int i = 0; 
    double median; 

    if(!infile) 
    { 
    cout << "couldn't find 'numbers.txt'"; 
    return 1; 
    } 

    while(i < SIZE && infile >> array[i]) 
    i++; 

    infile.close(); 

    for(i = 0; i < SIZE; i++) 
    cout << *(array + i) << "!\n"; 

    median=ArraySortToMedian(array, SIZE); 

    cout<< "\n" << median << "\n"; 
    return 0; 
} 

double ArraySortToMedian(int (x[]), int numElem) 
{ 
    bool swap; 
    int temp, i; 
    double m; 

    do 
    { 
    swap = false; 
    for(i = 0;i < (numElem - 1); i++) 
    { 
     if(x[i] > x[i + 1]) 
     { 
      temp = x[i]; 
      x[i] = x[i + 1]; 
      x[i + 1] = temp; 
      swap = true; 
     } 
    } 
    } 
    while (swap); 
    cout << "\n"; 
    for(i = 0; i < numElem; i++) 
    cout << x[i] << "\n"; 

    m = (x[numElem/2] + x[numElem/2]-1)/(double)2; 
    return(m); 
} 
+0

Her zaman referans olarak gönderilir. Yapılması zor olan (yani imkansız) şey, onları * değer * ile iletmektir. – EJP

+2

std :: vector kullanmamanız için iyi bir nedeniniz var mı? –

+0

Vektörler ve işaretçiler arasındaki ilişkiyi öğrenmeden önce diziler ve işaretçiler arasındaki ilişkiyi anlamaya çalışıyorum. – mrbw

cevap

0

Sadece int* arr için imza değiştirip bu yapabileceğini *(x + i)

+0

Bu, şu ana kadar benim için çalışan referans notasyonu ile medyanı döndürme sözdizimi: dönüş (* (x + (numElem)/2) + * (x + (numElem-1)/2))/(çift) 2; Yanlış yaptığım şey şu şekilde oldu: double İşlevAdı (int * arr []) [] öğesinin ilk adresine öğeyi zaten işaret ettiği için [] referans için gereksizdir. Tecrübe ile daha iyi uygulamalar öğreneceğim ve daha az sözdizimi hatası yapacağım. Oraya gitmeme yardım ettiğin için teşekkür ederim. – mrbw

1

You kullanarak saygın unsurları erişin. Ancak, buna karşı şiddetle tavsiye ediyorum, daha temiz bir uygulama için std::array'u kullanmanız daha iyi. Böyle bir fonksiyon parametresinin sözdizimi oldukça çirkin. Birlikte tahsis diziler için işaretçiler başa bu şablon aşırı çalışırsanız Bu, dinamik olarak ayrılmış diziler ile çalışmaz STL dizi

template <size_t N> 
double ArraySortToMedian(std::array<int,N>& x, int numElement) 

kullanma

kullanma ham C-Diziler

template <size_t N> 
double ArraySortToMedian(int (&x)[N], int numElement); 

new, üstel olarak daha karmaşık hale gelir.

İlgili konular