2016-11-25 51 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其進入對數組和指針之間的差異更深入。