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。