C语言 打印整数数组元素时的奇怪结果

vbopmzt1  于 2022-12-22  发布在  其他
关注(0)|答案(1)|浏览(180)

我只需要做一个简单的程序,我有一个随机数的数组,然后我需要对数组做一些事情,然后在最后打印元素,但是我不知道这里发生了什么。
首先,我想做一个代码,只是打印元素,看看它是否工作之前,做任何事情。

#include <stdio.h>

int main(void) {
    int nums[] = {12, 3, 54, -4, 56, 4, 7, 3};

    //.....

    for(int i = 0; nums[i]; i++) {
        printf("nums[%d] = %d\n", i, nums[i]);      
    }

    return 0;
}

结果是:

nums[0] = 12
nums[1] = 3
nums[2] = 54
nums[3] = -4
nums[4] = 56
nums[5] = 4
nums[6] = 7
nums[7] = 3
nums[8] = -427200144
nums[9] = 32765

我运行代码更多的时候,第8和第9元素总是有点随机...但我的意思是,我甚至没有那么多的数字,这里有什么问题??我也尝试了其他随机数,有时它的工作很好...
一个二个一个一个
有人能解释一下这里发生了什么吗?
编辑:同时我意识到这个方法不好,因为如果数组中的数字是0,那么我的条件是false,所以for循环停止,但是我很好奇,这里发生了什么,所以我还是要发布这个。

w51jfk4q

w51jfk4q1#

我建议

for(int i = 0; i < sizeof(nums) / sizeof(*nums); i++) {
        printf("nums[%d] = %d\n", i, nums[i]);
}

sizeof(nums)是数组的总大小(以字节为单位)。sizeof(*nums)是数组中一个元素的大小(以字节为单位)。因此,sizeof(nums) / sizeof(*nums)表示元素的数量,这应该是循环中的条件。
另一种选择是使用一个单独的变量来包含数组中的元素数量,但它不如我描述的第一种方法方便。

相关问题