Рубрики

Выход программы C | Комплект 18

Прогнозировать выход следующих программ на Си.

Вопрос 1

#include<stdio.h>

int fun()

{

  static int num = 40;

  return num--;

}

  

int main()

{

  for(fun(); fun(); fun())

  {

    printf("%d ", fun());

  }

  getchar();

  return 0;

}

Выход: 38 35 32 29 26 23 20 17 14 11 8 5 2

Поскольку num является статическим в fun (), старое значение num сохраняется для последующих вызовов функций. Кроме того, поскольку оператор return num– является постфиксом, он возвращает старое значение num и обновляет значение для следующего вызова функции.

вопрос 2

#include<stdio.h>

int main()

{

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

  char **p;

  p = s;

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

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

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

  

  getchar();

  return 0;

}

Вывод: nowledge nowledge s

Давайте рассмотрим выражение ++ * p в первом printf (). Поскольку приоритет префиксов ++ и * одинаков, ассоциативность входит в картину. * p вычисляется первым, потому что оба префикса ++ и * ассоциированы справа налево. Когда мы увеличиваем * p на 1, он начинает указывать на второй символ «знаний» . Поэтому первый оператор printf печатает «nowledge» .

Рассмотрим выражение * p ++ во втором printf (). Поскольку приоритет postfix ++ выше *, p ++ оценивается первым. И поскольку это psotfix ++, в этом выражении используется старое значение p . Поэтому второе утверждение printf печатает «nowledge» .

В третьем выражении printf используется новое значение p (обновляется вторым printf), а третье printf () печатает «s» .

Пожалуйста, напишите комментарии, если вы найдете какие-либо ответы / объяснения неправильными, или вы хотите поделиться дополнительной информацией по темам, обсужденным выше

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

Выход программы C | Комплект 18

0.00 (0%) 0 votes