Рубрики

Викторина С — 111 | Вопрос 1

Выберите лучшее утверждение для следующего фрагмента программы:

#include <stdio.h>

  

int main()

{

 int var;  / * Предположим, адрес var 2000 * /

  

 void *ptr = &var;

 *ptr = 5;

 printf("var=%d and *ptr=%d",var,*ptr);

               

 return 0;

}

(A) Будет напечатано «var = 5 and * ptr = 2000»
(B) Будет напечатано «var = 5 и * ptr = 5»
(C) Будет напечатано «var = 5 and * ptr = XYZ», где XYZ — некоторый случайный адрес
(D) Ошибка компиляции

Ответ: (D)
Объяснение: Ключевым моментом в приведенном фрагменте является разыменование пустого указателя. Следует отметить, что разыменование указателя void недопустимо, поскольку void является неполным типом данных. Правильный способ присвоить значение 5 будет сначала указатель типа void, а затем использовать его. Поэтому вместо * ptr следует использовать * (int *) ptr . Правильный ответ — d.
Тест на этот вопрос

Рекомендуемые посты:

Викторина С — 111 | Вопрос 1

0.00 (0%) 0 votes