📜  C程序的输出| 18套

📅  最后修改于: 2022-05-13 01:56:10.850000             🧑  作者: Mango

C程序的输出| 18套

预测以下 C 程序的输出。

问题 1

#include
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
int main()
{
  char *s[] = { "knowledge","is","power"};
  char **p;
  p = s;
  printf("%s ", ++*p);
  printf("%s ", *p++);
  printf("%s ", ++*p);
  
  getchar();
  return 0;
}

输出:nowledgenowledge s

让我们考虑一个 printf() 中的表达式++*p 。由于前缀 ++ 和 * 的优先级相同,结合性就出现了。 *p首先计算,因为前缀 ++ 和 * 都是从右到左关联的。当我们将*p增加 1 时,它开始指向“knowledge”的第二个字符。因此,第一个 printf 语句打印“nowledge”

让我们考虑第二个 printf() 中的表达式*p++ 。由于后缀 ++ 的优先级高于 *,因此首先评估p++ 。由于它是一个 psotfix ++,所以在这个表达式中使用了旧的p值。因此,第二个 printf 语句打印“nowledge”

在第三个 printf 语句中,使用p的新值(由第二个 printf 更新),第三个 printf() 打印“s”