Массивы на языке программирования C - PullRequest
0 голосов
/ 22 сентября 2019

Я новичок в языке программирования C и поэтому мне нужно объяснение этого:

#include <stdio.h>
#include <stdlib.h>

int main()
{

    int NUM[10];
    int i,index;


    for(i=0 ; i<8 ; i++){

        NUM[index]=i;

        index++;
    }


    printf("this is the number %d\n\n",NUM);
    return 0;
}

Это вывод:

this is the number 6356704

Почему число в консолине правильно?

Ответы [ 3 ]

1 голос
/ 22 сентября 2019

printf("this is the number %d\n\n",NUM); передает NUM в printf для форматирования с помощью спецификатора преобразования %d.

NUM - это массив.При этом он автоматически преобразуется в адрес своего первого элемента.%d ожидает, что int будет принят.Адрес не является int.Из-за этого несоответствия поведение этого кода не определено стандартом C.В лучшем случае printf напечатает адрес, отформатированный в десятичном формате.

Чтобы напечатать элементы массивов, вы должны написать цикл, который печатает каждый элемент, например, передав NUM[i] в printf вбыть отформатирован с %d.Вы можете использовать:

for (int i = 0; i < 8; ++i)
    printf("NUM[%d] = %d.\n", i, NUM[i]);
0 голосов
/ 22 сентября 2019

Так что здесь есть ряд вопросов.Для начала вы инициализируете целочисленную область (NUM), а затем пытаетесь распечатать ее в конце.Кроме того, вы инициализируете i, но не инициализируете index.Это приведет к тому, что значения, которые заполняют NUM, будут отличаться от ожидаемых, потому что ваша отправная точка - «мусор».

Ниже я включил слегка измененную версию.Обратите внимание, что после инициализации индекса я присваиваю ему значение, так что начальная точка равна нулю, как i.Я сделал небольшую модификацию в цикле, у меня for(i=0; i < sizeof(NUM)/sizeof(NUM[0]); i++).Единственное отличие здесь состоит в том, что вместо итерации произвольного числа раз (8 в вашем случае), я выполняю итерацию в цикле на основе общей длины массива (в байтах), деленной на длину каждого элемента (в байтах), котораядает общее количество целых чисел, которые оно содержит.Затем я печатаю каждый элемент области, как он назначен с printf("this is the number %d\n\n",NUM[i]);.

#include <stdio.h>
#include <stdlib.h>

int main()
{

    int NUM[10];
    int i,index;
    index = 0;

    for(i=0 ; i < sizeof(NUM)/sizeof(NUM[0]); i++){
        NUM[index]=i;
        printf("this is the number %d\n\n",NUM[i]);
        index++;
    }
    return 0;
}
0 голосов
/ 22 сентября 2019

ОЧЕНЬ неясно, что вы пытаетесь сделать.Но если вы хотите напечатать элементы внутри массива, вы не можете написать один оператор printf и ожидать, что элементы будут распечатаны для вас.

Чтобы распечатать элементы массива по порядку, вам придется использовать цикл for, чтобы сделать это.Как то так -

for (i=0; i<8; i++) 
{
     printf("%d", num[i]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...