2016-11-25 4 views
0

В главе 7 книги Deitel's о том, как запрограммировать автор, используется пример сортировки пузырьков, чтобы показать, что скрытие информации не позволяет отдельным элементам массива быть известными функции, указатели могут использоваться для передачи адреса и использования одинакового пути ,Как скрывать информацию, препятствуя доступу функции к отдельному элементу массива?

Вот функция подкачки с помощью указателя:

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, который углубляется в зависимости от различий между массивами и указателями.