这是我的代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
void check(int n, int arr[]);
int arr[] = {1, 2, 3, 4};
int i;
check(4, arr);
for (i = 0; i < 4; i++) {
printf("%d\n", arr[i]);
}
return 0;
}
void check(int n, int arr[]) {
int i = 0;
int *p = 0;
while (i++ < n)
p = &arr[i];
*p = 0;
}
我需要对输出进行解释。
我被问到的原始问题以及预期的多项选择答案是:
最佳答案
请发布您的实际代码,而不是您想要输入的代码。实际上复制粘贴您的真实代码。
因为你输入错误。
您可以在此处添加额外的 {}:
while(i++ < n) {
p = &arr[i];
*p = 0;
}
或者您使用逗号而不是分号:
while(i++ < n)
p = &arr[i],
*p = 0;
因此每次都会执行对零的赋值。
编辑添加:是的,您添加了原始问题没有的额外的 {}。因此,在您的代码中,“*p = 0”每次都会在 while 循环中执行,而原始问题“*p = 0”仅执行一次并破坏数组末尾的一些随机数据。
(顺便说一下,原来问题的答案实际上是“这是未定义的行为;程序不一定会打印任何内容。有效的行为包括打印 1 2 3 4、打印 42 42 42 42、崩溃和格式化你的硬盘。”)
关于c - 此 C 代码的输出说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32529912/