📜  C 程序的输出 | 7套

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

C 程序的输出 | 7套

预测以下程序的输出

问题 1

int main()
{
    int i = 0;
    while (i <= 4)
    {
       printf("%d", i);
       if (i > 3)
        goto inside_foo;
       i++;
    }  
    getchar();
    return 0;
}
  
void foo()
{
   inside_foo:
     printf("PP");
}

输出:编译器错误:标签“inside_foo”已使用但未定义。

说明:标签的作用域在函数。我们不能从其他函数转到标签。



问题2

#define a 10
int main()
{
  #define a 50
  printf("%d",a);
    
  getchar();
  return 0;
}

输出:50

如果我们重新定义预处理器指令,预处理器不会给出任何错误。不过它可能会发出警告。预处理器在使用前取最近的值并用它代替 a。

现在尝试以下

#define a 10
int main()
{
  printf("%d ",a);  
  #define a 50
  printf("%d ",a);
    
  getchar();
  return 0;
}


问题 3

int main()
{
     char str[] = "geeksforgeeks";
     char *s1 = str, *s2 = str;     
     int i;
       
     for(i = 0; i < 7; i++)
     {
        printf(" %c ", *str);
        ++s1;     
     }
       
     for(i = 0; i < 6; i++)
     {
        printf(" %c ", *s2);
        ++s2;     
      }
      
      getchar();
      return 0;
}

输出
哈哈

解释
s1 和 s2 都初始化为 str。在第一个循环中 str 被打印并且 s1 被递增,所以第一个循环将只打印 g。在第二个循环中 s2 递增并打印 s2,因此第二个循环将打印“geeksf”



问题 4

int main()
{
    char str[] = "geeksforgeeks";
    int i;
    for(i=0; str[i]; i++)
        printf("\n%c%c%c%c", str[i], *(str+i), *(i+str), i[str]);
     
    getchar();
    return 0;
}

输出:
嘎嘎
eeee
eeee
kkkk
ssss

哦哦
rrrr
嘎嘎
eeee
eeee
kkkk
ssss

说明:
以下是索引 array 和字符串 的不同方法。

arr[i]
*(arr + i)
*(我+ arr)
我[阿]

所以他们都打印相同的字符。

问题 5

int main()
{
    char *p;
    printf("%d %d ", sizeof(*p), sizeof(p));
     
    getchar();
    return 0;
}

输出:依赖于编译器。我得到的输出为“1 4”

解释:
上述程序的输出取决于编译器。 sizeof(*p) 给出字符的大小。如果字符存储为 1 个字节,则 sizeof(*p) 给出 1。
sizeof(p) 给出指针变量的大小。如果指针变量存储为 4 个字节,则它给出 4。