c - 此 C 代码的输出说明

标签 c arrays

这是我的代码:

#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;
}

我需要对输出进行解释。

我被问到的原始问题以及预期的多项选择答案是:

code

最佳答案

请发布您的实际代码,而不是您想要输入的代码。实际上复制粘贴您的真实代码。

因为你输入错误。

您可以在此处添加额外的 {}:

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/

相关文章:

C 程序启动参数

c - 如何计算整数数组中的元素数

c - wait4 和 waitpid 没有返回正确的状态

java - if 语句中创建的对象数组(范围问题)

c++ - 无法将一个数组的内容复制到另一个数组中...得到奇怪的数字

java - 将 ResultSet 存储到数组中并在 JComboBox 中列出它们

c - 总线错误 : 10 in C dealing with struct pointers

c - 如何选择要使用 GLib 测试套件运行的测试?

arrays - 无需评估即可动态创建结构数组

javascript - 对数组对象进行分组,使具有相似键的对象不会放入同一组中