2016-11-25 3 views
0

In Kapitel 7 von Deitel's C, wie der Autor verwendet Blase Beispiel verwendet, um zu zeigen, dass die Informationen verstecken einzelne Elemente Array Elemente zu sein, um die Funktion nicht bekannt sein, können Zeiger verwendet werden, um die Adresse herum und auf die gleiche Weise verwendet werden . HierWie verhindert das Ausblenden von Informationen den Zugriff auf einzelne Array-Elemente?

ist die Swap-Funktion Zeiger:

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

Hier ist, was ich getan habe:

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

Die main():

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

ich den Code lief und beide Sortiere das Array korrekt. Also dachte ich, dass meine Funktion tatsächlich den Zugang zu einzelnen Elementen erlangt hat. Welchen Teil verstehe ich falsch? Ich muss sicherstellen, dass ich jeden Punkt verstehe, bevor ich fortfahre, da das Überspringen von einem den Inhalt wirklich schwer zu verstehen macht.

+0

Warum haben Sie ein C++ - Tag? Hast du es bemerkt? Wussten Sie, dass C++ nicht mit Klassen c ist? –

+0

Wie definiert das Buch * information hiding *? Was ist es? –

+0

Die erste Version von * swap * wird bevorzugt, weil sie nicht davon ausgeht, dass die Parameter von einem Array stammen. Dies macht es allgemeiner anwendbar. –

Antwort

0

In C sind Zeiger und Arrays austauschbar. Wenn Sie auf Array-Elemente per Index zugreifen, wie in myArray[x], bedeutet dies "die Position von myArray + (x * die Größe der Elemente im Array)". So können Sie das gleiche Ergebnis erhalten, indem Sie myArray + (x * sizeof(<type of myArray>)); tun.

Sie können auch überprüfen, this answer, die auf die Unterschiede zwischen Arrays und Zeigern tiefer geht.

Verwandte Themen