Масиви змінної довжини
У С89 розмірності масивів необхідно оголошувати за допомогою виразів з цілих констант, причому розмір масиву фіксується під час компіляції. В силу певних обставин, в С99 це правило було змінено. У С99 можна оголосити масив, розмірності якого визначаються будь-якими допустимими цілими виразами, в тому числі і такими, значення яких стають відомі тільки під час виконання. Такий масив називається масивом змінної довжини (variable-length array, VLA). Однак такими масивами можуть бути тільки локальні масиви (тобто ті, у яких область видимості - прототип або блок). Ось приклад масиву змінної довжини:
В даному випадку розмір matrix визначається значеннями, переданими функції f () через змінні dim1 і dim2. Таким чином, в результаті кожного виклику f () може вийти масив matrix з різними вимірами.
Можна вказати масив змінної довжини невизначеного розміру, використовуючи в якості розміру зірочку, *.
Поява масивів змінної довжини викликало невелика зміна в операторі sizeof. Взагалі кажучи, sizeof - це оператор, який обчислюється під час компіляції. Тобто під час компіляції він зазвичай перетворюється в цілу константу, значення якої дорівнює розміру типу або об'єкта. Однак якщо sizeof застосовується до масиву змінної довжини, то своє значення він отримує тільки під час виконання. Ця зміна була необхідно тому, що розмір масиву змінної довжини не можна дізнатися до часу виконання.
Однією з головних причин появи масивів змінної довжини є бажання спростити програмування чисельних методів. Звичайно, це засіб застосовується досить широко. Але пам'ятайте - масиви змінної довжини не підтримуються Стандартом С89 (і в мові C ++).
Тут дається гарантія, що str буде вказувати на початок масиву типу char. причому в ньому буде не менше 80 елементів.