о массиве в C - PullRequest
       24

о массиве в C

5 голосов
/ 13 апреля 2011

Я написал следующий код (см. Комментарии к коду для вопроса),

#include<stdio.h>
int main()
{
    int size;
    scanf("%d",&size);
    int arr[size];    /*is it a valid statement?*/
    for(int i=1;i<=size;i++)
    {
        scanf("%d",&arr[i]);
        printf("%d",arr[i]);
    }
    return 0;
}

Ответы [ 5 ]

6 голосов
/ 13 апреля 2011

Использование не постоянного размера массива допустимо для C99, но не для C90. Существует более старое расширение gcc, позволяющее это.

Обратите внимание, что использование этого усложняет проверку успешного распределения памяти. Использование его со значениями, предоставленными пользователем, вероятно, нецелесообразно.

4 голосов
/ 13 апреля 2011

Вы не можете выделить динамический массив в C90 таким образом.Вам нужно будет динамически распределить его с помощью malloc следующим образом:

int* array = (int*) malloc(sizeof(int) * size);

Вы также индексируете массивы, начиная с 0, а не с 1, поэтому цикл for должен начинаться так:

for(int i = 0; i < size; i++)

Если вы используете метод malloc, вам также потребуется освободить память после того, как вы поработаете с ним:

free(array);
3 голосов
/ 13 апреля 2011

Кроме того,

Индексирование массива в C начинается с 0, а не с 1. и не включает size.

int i;
for(i=0 ; i < size ; i++) // Notice the < and the 0
{
     //...
}
0 голосов
/ 13 апреля 2011

Это было бы допустимо, если бы размер был постоянным. В противном случае вы должны делать то, что сказал DShook. Кроме того, убедитесь, что вы освободили (массив) в какой-то момент, иначе ваша программа утечет память.

0 голосов
/ 13 апреля 2011

Компилятор пытается оценить int arr[size] во время компиляции. В этом случае arr выделяется в стеке, поэтому компилятор хочет знать его размер заранее. Вместо этого вам нужно распределить arr в куче, используя malloc, вот так.

#include<stdio.h>
int main()
{
    int size;
    scanf("%d",&size);
    int *arr = malloc(sizeof(int) * size);
    for(int i=1;i<=size;i++)
    {
        scanf("%d",&arr[i]);
        printf("%d",arr[i]);
    }

    free(arr);
    return 0;
}

См. этот пост для получения дополнительной информации о том, когда использовать malloc

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...