Рубрики

C | Операторы | Вопрос 12

#include<stdio.h> 

int main() 

  char *s[] = { "knowledge","is","power"}; 

  char **p; 

  p = s; 

  printf("%s ", ++*p); 

  printf("%s ", *p++); 

  printf("%s ", ++*p); 

    

  return 0; 

}

(А) это сила
(B) сейчас
(C) больше
(D) знание сейчас

Ответ: (Б)
Объяснение: Давайте рассмотрим выражение ++ * p в первом printf (). Поскольку приоритет префиксов ++ и * одинаков, ассоциативность входит в картину. * p вычисляется первым, потому что оба префикса ++ и * ассоциированы справа налево. Когда мы увеличиваем * p на 1, он начинает указывать на второй символ «знаний». Поэтому первый оператор printf печатает «nowledge».
Рассмотрим выражение * p ++ во втором printf (). Поскольку приоритет postfix ++ выше *, p ++ оценивается первым. И поскольку это psotfix ++, в этом выражении используется старое значение p. Поэтому второе утверждение printf печатает «nowledge».
В третьем выражении printf используется новое значение p (обновляется вторым printf), а третье printf () печатает «s».

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

C | Операторы | Вопрос 12

0.00 (0%) 0 votes