Пытался напечатать элементы массива int, но я получил странные результаты - PullRequest
0 голосов
/ 26 октября 2019

Мне просто нужно сделать простую программу, в которой у меня есть массив со случайными числами, затем я должен сделать некоторые вещи с массивом, а затем распечатать элементы в конце. Но я не знаю, что здесь происходит.

Сначала я хотел создать код, просто напечатать элементы и посмотреть, работает ли он, прежде чем делать что-либо еще.

#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 останавливается, но мне интересно, что здесь происходит, поэтому я все равно опубликую это.

1 Ответ

0 голосов
/ 26 октября 2019

Я рекомендую

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) представляет количество элементов, и это должно быть условием в цикле.

Другой вариант - иметь отдельную переменную, которая содержит количество элементов в массиве, но это менее удобно, чемпервый метод, который я описал.

...