📜  C 程序的输出 | 8套

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

C 程序的输出 | 8套

预测以下 C 程序的输出。
问题 1:

c
#include
int main()
{
    int x = 5, p = 10;
    printf("%*d", x, p);
 
    getchar();
    return 0;
}


c
int main()
{
  char arr[]  = "geeksforgeeks";
  char *ptr  = arr;
 
  while(*ptr != '\0')
      ++*ptr++;
  printf("%s %s", arr, ptr);
 
  getchar();
  return 0;
}


c
int main()
{
  signed char i=0;
  for(; i >= 0; i++);
  printf("%d\n", i);
 
  getchar();
  return 0;
}


c
#include 
void fun(const char **p) { }
int main(int argc, char **argv)
{
   fun(argv);
   getchar();
   return 0;
}


输出:

10

解释:
请参阅标准 printf函数定义

int printf ( const char * format, ... );

格式:包含要写入标准输出的文本的字符串。它可以选择包含嵌入的格式标签,这些标签被后续参数中指定的值替换并按要求格式化。格式参数后面的参数数量至少应该与格式标签的数量一样多。格式标签遵循这个原型:

%[flags][width][.precision][length]specifier

您可以在此处查看上述所有部分的详细信息 http://www.cplusplus.com/reference/clibrary/cstdio/printf/。
需要注意的主要事情是在关于精度的线下方
* (star) :格式字符串未指定宽度,而是作为必须格式化的参数之前的附加整数值参数。



简单来说,要打印的值必须至少有宽度对应的字符数。这里宽度是5,要打印的值是10。由于它只有两个字符,为了使它成为5,将在10之前打印三个空格。

所以 10 在 3 个空格后打印!!
问题2

C

int main()
{
  char arr[]  = "geeksforgeeks";
  char *ptr  = arr;
 
  while(*ptr != '\0')
      ++*ptr++;
  printf("%s %s", arr, ptr);
 
  getchar();
  return 0;
}

输出: hffltgpshfflt
解释:
这个问题的关键在于表达式++*ptr++。
如果你知道运算符的优先级和结合性,那么就没有什么可剩下的了。以下是运算符的优先级。

Postfixx ++            left-to-right
   Prefix  ++             right-to-left
   Dereference *          right-to-left

因此表达式 ++*ptr++ 具有以下效果
*ptr 的值增加
ptr 的值递增
问题 3

C

int main()
{
  signed char i=0;
  for(; i >= 0; i++);
  printf("%d\n", i);
 
  getchar();
  return 0;
}

输出:-128
解释:
在这里,首先要注意的是 for 循环末尾的分号。所以基本上,for 循环没有主体。 printf 将在控制退出 for 循环时打印 i 的值。另外,请注意 for 循环中的第一条语句即初始化程序不存在。但 i 已在声明时初始化。由于 i 是一个有符号字符,它可以取值从 -128 到 127。所以在 for 循环中, i 将不断递增并满足条件,直到发生翻转。在翻转时,i 将在 127 之后变为 -128,在这种情况下,条件不满足并且控制来自 for 循环。
问题 4

C

#include 
void fun(const char **p) { }
int main(int argc, char **argv)
{
   fun(argv);
   getchar();
   return 0;
}

输出:编译器错误。
解释:
传递给 fun() 的参数和定义中预期的参数是不兼容的类型。 fun() 需要 const char** 而传递的参数是 char ** 类型。
现在尝试以下程序,它将起作用。

void fun(const char **p) { }
int main(int argc, char **argv)
{
   const char **temp;
   fun(temp);
   getchar();
   return 0;
}