Extinderea matricelor

Lungimea variabila

În C89, dimensiunile matricelor trebuie declarate folosind expresii din constante întregi, iar dimensiunea matricei este fixată la timpul de compilare. Din anumite circumstanțe, în C99 această regulă a fost modificată. În C99, puteți declara o matrice a cărei dimensiuni sunt definite de orice expresii valide întregi, inclusiv cele ale căror valori devin cunoscute numai la timpul de execuție. O astfel de matrice este numită matrice cu lungime variabilă (VLA). Totuși, astfel de rețele pot fi doar rețele locale (adică acelea care au un scop sau un blocaj). Iată un exemplu de matrice de lungime variabilă:







În acest caz, matricea mărimii este determinată de valorile transmise funcției f () prin variabilele dim1 și dim2. Astfel, ca rezultat al fiecărui apel la f (), putem obține o matrice de matrice cu dimensiuni foarte diferite.







Puteți specifica o matrice de lungime variabilă de mărime nespecificată, folosind asterisc, *.

Aspectul matricelor cu lungime variabilă a determinat o mică modificare a operatorului de dimensiuni. În general vorbind, sizeof este un operator care este evaluat la timpul de compilare. Adică, la momentul compilării se transformă, de obicei, într-o constantă intregă, a cărei valoare este egală cu mărimea tipului sau a obiectului. Cu toate acestea, dacă sizeof este aplicat unei matrice cu lungime variabilă, devine valoarea acesteia numai la timpul de execuție. Această modificare a fost necesară deoarece mărimea unei matrice cu lungime variabilă nu poate fi cunoscută până la timpul de execuție.

Unul dintre principalele motive pentru aparitia matricelor cu lungime variabila este dorinta de a simplifica programarea metodelor numerice. Desigur, acest instrument este folosit destul de larg. Dar rețineți - matricele cu lungime variabilă nu sunt acceptate de standardul C89 (și de C ++).

Aici ni se dă o garanție că str va îndrepta către începutul unei matrice de tip char. cu cel puțin 80 de elemente în el.







Articole similare

Trimiteți-le prietenilor: