Можно ли объявить массив с помощью переменной? - PullRequest
0 голосов
/ 07 января 2020

Привет, мне говорили во время моего первого урока о массивах в C, что вы не можете объявить их, используя переменную, например: int array[n]. Тем не менее, если я напишу код, подобный этому:

#include <stdio.h>
int main()
{
    int n;
    scanf("%d",&n);
    int array[n];
}

Codeblocks не выдаст мне ни предупреждения, ни ошибки. Откуда я знаю, что то, что я написал, неверно?

Ответы [ 2 ]

1 голос
/ 07 января 2020

Это действительно (с C99), но необязательно (с C11). Более портативный:

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

int main() {
  size_t n = 0;
  int *array = NULL;
  if ((scanf("%zu", &n) <= 0) ||
      (n > SIZE_MAX / sizeof(*array)) ||
      ((array = malloc(n * sizeof(*array))) == NULL)) 
  {
    return EXIT_FAILURE;
  }

  // Use array

  free(array);  // Don't forget to free the memory.
}
0 голосов
/ 07 января 2020

Кодовые блоки не дают вам ошибки или предупреждения, потому что их нет. Вы можете сделать декларацию без проблем с C99.

...