Быстрый вопрос по манипулированию нативными массивами - PullRequest
0 голосов
/ 19 ноября 2018
#include <iostream>

int
main(void)
{
    int n;
    std::cin >> n;

    int x[n];

    return 0;
}

С точки зрения C, приведенный выше код не должен быть скомпилирован должным образом, потому что размер массива 'x', я полагаю, еще не определен.

Только после того, как пользователь передастаргумент для переменной 'n', размер 'x' может быть определен, но код не зависал при компиляции и запуске, и мне интересно, почему.

Если бы он был написан на C, я думаю, что людиЯ использовал malloc для конфигурируемых массивов во время выполнения.

Возможно, у меня есть неправильное представление о массивах, распределении памяти, компиляторе и отношениях между c и c ++.Пожалуйста, поправьте меня, если я ошибаюсь.

1 Ответ

0 голосов
/ 19 ноября 2018

Нет, с точки зрения C код недействителен, поскольку <iostream> не является заголовком C, а std::cin является синтаксической ошибкой. С другой стороны, часть int x[n]; будет в порядке: это массив переменной длины, функция, впервые представленная в C99.

Стандартный C ++ не имеет (собственных) массивов переменной длины. g ++ допускает их как расширение , хотя:

Автоматические массивы переменной длины разрешены в ISO C99, и в качестве расширения GCC принимает их в режиме C90 и в C ++.

Обычно в C ++ вы используете std::vector.

...