Что такое scanf ("% d", array + i); делает - PullRequest
0 голосов
/ 04 апреля 2020
void get_elemnts(int *array, int max_index){
    for(int i = 0; i < max_index; i++){
        printf("enter element 0%d: ", i);
        scanf("%d", array + i);
    }
}

** scanf ("% d", array + i); ** Может кто-нибудь объяснить? У меня есть код, который получает элементы массива из пользовательского ввода. И в настоящий момент у меня возникают трудности с пониманием того, что именно делает эта часть кода

Ответы [ 2 ]

3 голосов
/ 04 апреля 2020

Используются три концепции:

  1. scanf("%d", pointer) метод считывает целочисленное значение (%d) из stdin и записывает его в память, на которую ссылается pointer.
  2. Природа массивов: массивы в C хранятся линейно в памяти: массив int размером n занимает всего n * sizeof(int) байт в памяти, а переменная массива такая же, как указатель на его первый элемент .
  3. Арифметика указателя c: array + i перемещает указатель на i ячеек памяти типа int, что составляет i * sizeof(int) байт. Именно там находится i-й элемент массива. Так что array + i - это указатель на array[i].
1 голос
/ 04 апреля 2020

Определение этой функции

void get_elemnts(int *array, int max_index){
    for(int i = 0; i < max_index; i++){
        printf("enter element 0%d: ", i);
        scanf("%d", array + i);
    }
}

эквивалентно

void get_elemnts(int *array, int max_index){
    for(int i = 0; i < max_index; i++){
        printf("enter element 0%d: ", i);
        scanf("%d", &array[i] );
    }
}

Это выражение array + i дает указатель на i-й элемент массива.

Формат %d, используемый в функции scanf, ожидает указатель на объект типа int, а это выражение array + i возвращает указатель с помощью арифметики указателя c.

Выражение array[i] эквивалентно выражению *( array + i ).

Таким образом, выражение &array[i] совпадает с &*( array + i ), где применяемые операторы &* можно опустить, и вы получите просто ( array + i ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...