【问题标题】:Trying to print elements of an int array, but I got some weird results试图打印一个 int 数组的元素,但我得到了一些奇怪的结果
【发布时间】:2020-02-22 15:49:56
【问题描述】:

我只需要编写一个简单的程序,其中我有一个随机数的数组,然后我必须对数组做一些事情,然后在最后打印元素。但我不知道这里发生了什么。

首先我想编写一个代码,只是打印元素并在执行其他任何操作之前查看它是否有效。

#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 个元素总是有点随机......但我的意思是我什至没有那么多数字,这里有什么问题? 我也尝试了其他随机数,有时效果很好......

    int nums[] = {2, -10, 64, 100, 22, 4};
nums[0] = 2
nums[1] = -10
nums[2] = 64
nums[3] = 100
nums[4] = 22
nums[5] = 4

有人能解释一下这里发生了什么吗?

编辑:同时我意识到这个方法很糟糕,因为如果数组中的数字是 0,那么我的条件是假的,所以 for 循环停止,但我很好奇,这里发生了什么,所以我还是要发布这个.

【问题讨论】:

    标签: c arrays numbers int


    【解决方案1】:

    我推荐

    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) 代表元素的数量,这应该是循环中的条件。

    另一种选择是使用包含数组中元素数量的单独变量,但它不如我描述的第一种方法方便。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-16
      • 2019-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-12
      • 1970-01-01
      相关资源
      最近更新 更多