Всякий раз, когда мне нужно создать массив с несколькими элементами, неизвестными до момента выполнения, я делаю это.
int n, i;
printf("Number of elements: ");
scanf("%d", &n);
int myArray[n];
for(i = 0; i < n; i++)
myArray[i] = 0;
Однако 3 человека со степенью доктора компьютерных наук сказали мне не делать этого, потому что «это не гарантирует работу на каждом компиляторе», и что количество элементов в массиве должно быть известно во время компиляции. Поэтому они делают это так.
int myArray[1000];
int n, i;
printf("Number of elements: ");
scanf("%d, &n);
//we must stop at the n element
for(i = 0; i < n; i++)
myArray[i] = 0;
Какой из них я должен использовать? Когда это не гарантирует работу? Это просто пустая трата памяти или необходимость поддерживать наследие?
int * myArray = malloc( n * sizeof *myArray);
и выполните очистку позже, когда закончите. - person WhozCraig   schedule 29.07.2016