2016-11-25 1 views
0

DeitelのCの第7章では、情報の隠蔽によって個々の配列要素が関数に認識されないことを示すために、バブルソートの例を使用してプログラムを作成する方法で、ポインタを使用してアドレスを渡したり、 。ここで情報隠蔽が関数が個々の配列要素にアクセスするのを防ぐ方法はありますか?

は、ポインタを使用してスワップ機能である:ここで

void swap(int *element1Ptr, int *element2Ptr) { 
    int hold = *element1Ptr; 
    *element1Ptr = *element2Ptr; 
    *element2Ptr = hold; 
    } 

は私がやったことです:

void swap(int array[],int j) { 
    int hold = array[j]; 
    array[j] = array[j + 1]; 
    array[j + 1] = hold; 
} 

メイン():

int main(void) { 
    int b[] = {2,6,4,8,10,12,89,68,45,37}; 
    for (int i = 0; i < 9; i++) { 
     for (int n = 0; n < 9; n++) { 
      if (b[n] > b[n + 1]) { 
       swap(&b[n], &b[n+1]); // or swap(b,n); 
      } 
     } 
    } 

    for (int i = 0; i < 9; i++) { 
     printf("%d ", b[i]); 
    } 
    puts(""); 
    return 0; 
} 

私は、コードを実行し、両方の配列を正しく並べ替えます。だから私の機能は実際に個々の要素へのアクセスを得たと思った。どの部分が間違っているのか分かりませんか?来るべきコンテンツを本当に理解しづらいものにするために、私はスキップしながら移動する前にあらゆる点を理解しておく必要があります。

+0

なぜあなたはC++タグを持っていますか?あなたはそれに気づきましたか?あなたはC++がクラスにcではないことを知っていましたか? –

+0

また、この本は*情報隠蔽*をどのように定義していますか?それは何ですか? –

+0

* swap *の最初のバージョンは、パラメータが配列から来たものとはみなされないので、優先されます。これにより、より一般的に適用可能となる。 –

答えて

0

Cでは、ポインタと配列は互換性があります。 myArray[x]のように配列要素をインデックスでアクセスすると、「myArrayの場所+(x *配列内の要素のサイズ)」という意味になります。したがって、myArray + (x * sizeof(<type of myArray>));を実行して同じ結果を得ることができます。

this answerをチェックして、配列とポインタの違いについてさらに詳しく調べることができます。

関連する問題