Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π―Π·Ρ‹ΠΊ программирования C++. ΠŸΡΡ‚ΠΎΠ΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 41

Автор Π‘Ρ‚Π΅Π½Π»ΠΈ Π›ΠΈΠΏΠΏΠΌΠ°Π½

Если Π²Ρ‹ Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅ Ρ‚ΠΎΡ‡Π½ΠΎ, сколько элСмСнтов Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π²Π΅ΠΊΡ‚ΠΎΡ€.

3.5.1. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈ инициализация встроСнных массивов

Массив являСтся составным Ρ‚ΠΈΠΏΠΎΠΌ (см. Ρ€Π°Π·Π΄Π΅Π» 2.3). ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ объявлСния массива ΠΈΠΌΠ΅Π΅Ρ‚ Ρ„ΠΎΡ€ΠΌΡƒ a[d], Π³Π΄Π΅ Π° β€” имя; d β€” Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ опрСдСляСмого массива. Π Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ Π·Π°Π΄Π°Π΅Ρ‚ количСство элСмСнтов массива, ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ большС нуля. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ элСмСнтов β€” это Ρ‡Π°ΡΡ‚ΡŒ Ρ‚ΠΈΠΏΠ° массива, поэтому ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ извСстна Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ компиляции. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ константным Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ (см. Ρ€Π°Π·Π΄Π΅Π» 2.4.4).

unsigned cnt = 42;          // нСконстантноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

constexpr unsigned sz = 42; // константноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

                            // constexpr см. p. 2.4.4

int arr[10];                // массив дСсяти Ρ†Π΅Π»Ρ‹Ρ… чисСл

int *parr[sz];              // массив 42 ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° int

string bad[cnt];            // ошибка: cnt нСконстантноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

string strs[get_size()];    // ok, Ссли get_size - constexpr,

                            // Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС - ошибка

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ элСмСнты массива ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (Ρ€Π°Π·Π΄Π΅Π» 2.2.1).

Подобно ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ встроСнного Ρ‚ΠΈΠΏΠ°, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ массив встроСнного Ρ‚ΠΈΠΏΠ°, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ значСния.

ΠŸΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ массива Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ Π΅Π³ΠΎ элСмСнтов. НСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ спСцификатор auto для Π²Ρ‹Π²ΠΎΠ΄Π° Ρ‚ΠΈΠΏΠ° ΠΈΠ· списка ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ². Подобно Π²Π΅ΠΊΡ‚ΠΎΡ€Ρƒ, массив содСрТит ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ массив ссылок.

Явная инициализация элСмСнтов массива

Массив допускаСт ΡΠΏΠΈΡΠΎΡ‡Π½ΡƒΡŽ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ (см. Ρ€Π°Π·Π΄Π΅Π» 3.3.1) элСмСнтов. Π’ этом случаС Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ. Если Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ отсутствуСт, компилятор Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π΅Π΅ ΠΈΠ· количСства ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ². Если Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π°, количСство ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Ρ‚ΡŒ Π΅Π΅.

Если Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ большС количСства ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ², Ρ‚ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ΠΏΠ΅Ρ€Π²Ρ‹Ρ… элСмСнтов, Π° ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (см. Ρ€Π°Π·Π΄Π΅Π» 3.3.1):

const unsigned sz = 3;

int ia1[sz] = {0, 1, 2};      // массив ΠΈΠ· Ρ‚Ρ€Π΅Ρ… Ρ†Π΅Π»Ρ‹Ρ… чисСл со

                              // значСниями 0, 1, 2

int a2[] = {0, 1, 2};         // массив Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 3 элСмСнта

int a3[5] = {0, 1, 2};        // эквивалСнт a3[] = {0, 1, 2, 0, 0}

string a4[3] = {"hi", "bye"}; // эквивалСнт a4[] = {"hi", "bye", ""}

int a5[2] = {0, 1, 2};        // ошибка: слишком ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ²

ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… массивов

Π£ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… массивов Π΅ΡΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Ρ„ΠΎΡ€ΠΌΠ° ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ: строковым Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠΌ (см. Ρ€Π°Π·Π΄Π΅Π» 2.1.3). Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ эту Ρ„ΠΎΡ€ΠΌΡƒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, слСдуСт ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ строковыС Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ символом. Π­Ρ‚ΠΎΡ‚ Π½ΡƒΠ»Π΅Π²ΠΎΠΉ символ копируСтся Π² массив наряду с символами Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π°.

char a1[] = {'C', '+', '+'};       // списочная инициализация Π±Π΅Π·

                                   // Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ символа

char Π°2[] = {'C', '+', '+', '\0'}; // списочная инициализация с явным

                                   // Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ символом

char a3[] = "Π‘++";                 // Π½ΡƒΠ»Π΅Π²ΠΎΠΉ символ добавляСтся

                                   // автоматичСски

const char a4[6] = "Daniel";       // ошибка: Π½Π΅Ρ‚ мСста для Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ

                                   // символа!

Массив a1 ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ 3; массивы Π°2 ΠΈ a3 β€” размСрности 4. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ массива a4 ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½ΠΎ. Π₯отя Π»ΠΈΡ‚Π΅Ρ€Π°Π» содСрТит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡˆΠ΅ΡΡ‚ΡŒ явных символов, массив a4 Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ сСмь элСмСнтов, Ρ‚.Π΅. ΡˆΠ΅ΡΡ‚ΡŒ для самого Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π° ΠΈ ΠΎΠ΄ΠΈΠ½ для Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ символа.

НС допускаСтся Π½ΠΈ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, Π½ΠΈ присвоСниС

НСльзя ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ массив ΠΊΠ°ΠΊ копию Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ массива, Π½Π΅ допустимо Ρ‚Π°ΠΊΠΆΠ΅ присвоСниС ΠΎΠ΄Π½ΠΎΠ³ΠΎ массива Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ.

int a[] = {0, 1, 2}; // массив ΠΈΠ· Ρ‚Ρ€Π΅Ρ… Ρ†Π΅Π»Ρ‹Ρ… чисСл

int a2[] = a;        // ошибка: нСльзя ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ массив

                     // Π΄Ρ€ΡƒΠ³ΠΈΠΌ

Π°2 = a;              // ошибка: нСльзя ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ массив Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ

НСкоторыС компиляторы Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ присвоСниС массивов ΠΏΡ€ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ компилятора (compiler extension). Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, использования нСстандартных срСдств слСдуСт ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… компиляторах.

ΠŸΠΎΠ½ΡΡ‚ΠΈΠ΅ слоТных объявлСний массива

Как ΠΈ Π²Π΅ΠΊΡ‚ΠΎΡ€Ρ‹, массивы способны ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° Ρ‚ΠΈΠΏΠΎΠ². НапримСр, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ массив ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ массив β€” это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ, ΠΈ ссылки Π½Π° массивы. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ массива, содСрТащСго ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ, довольно просто, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ указатСля ΠΈΠ»ΠΈ ссылки Π½Π° массив Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ слоТнСй.

int *ptrs[10];            // ptrs массив дСсяти ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° int

int &refs[10] = /* ? */;  // ошибка: массив ссылок Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½

int (*Parray)[10] = &arr; // Parray ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° массив ΠΈΠ· дСсяти int

int (&arrRef)[10] = arr;  // arrRef ссылаСтся Π½Π° массив ΠΈΠ· дСсяти ints

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ Ρ‚ΠΈΠΏΠ° Ρ‡ΠΈΡ‚Π°ΡŽΡ‚ справа Π½Π°Π»Π΅Π²ΠΎ. Π§ΠΈΡ‚Π°Π΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ptrs справа Π½Π°Π»Π΅Π²ΠΎ (см. Ρ€Π°Π·Π΄Π΅Π» 2.3.3): ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ массив Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 10 ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ ptrs для хранСния ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° Ρ‚ΠΈΠΏ int.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Parray Ρ‚Π°ΠΊΠΆΠ΅ стоит Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ справа Π½Π°Π»Π΅Π²ΠΎ. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ массива слСдуСт Π·Π° ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅ΠΌΡ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ, объявлСниС массива ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»Π΅Π³Ρ‡Π΅ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈΠ·Π½ΡƒΡ‚Ρ€ΠΈ Π½Π°Ρ€ΡƒΠΆΡƒ, Π° Π½Π΅ справа Π½Π°Π»Π΅Π²ΠΎ. Π’Π°ΠΊ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ Ρ‚ΠΈΠΏ Parray. ОбъявлСниС начинаСтся с ΠΊΡ€ΡƒΠ³Π»Ρ‹Ρ… скобок Π²ΠΎΠΊΡ€ΡƒΠ³ части *Parray, ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰Π΅ΠΉ, Ρ‡Ρ‚ΠΎ Parray β€” ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ. Глядя Π½Π°ΠΏΡ€Π°Π²ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Parray ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° массив Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 10. Глядя Π²Π»Π΅Π²ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ элСмСнтами этого массива ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ†Π΅Π»Ρ‹Π΅ числа. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Parray β€” это ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° массив ΠΈΠ· дСсяти Ρ†Π΅Π»Ρ‹Ρ… чисСл. Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ Ρ‡Π°ΡΡ‚ΡŒ (&arrRef) ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ arrRef β€” это ссылка, Π° Ρ‚ΠΈΠΏΠΎΠΌ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ½Π° ссылаСтся, являСтся массив Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 10, хранящий элСмСнты Ρ‚ΠΈΠΏΠ° int.

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π½Π° количСство примСняСмых ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² Ρ‚ΠΈΠΏΠ°.

int *(&arry)[10]=ptrs; // arry - ссылка Π½Π° массив ΠΈΠ· дСсяти ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ

Читая это объявлСниС ΠΈΠ·Π½ΡƒΡ‚Ρ€ΠΈ Π½Π°Ρ€ΡƒΠΆΡƒ, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ arry β€” это ссылка. Глядя Π½Π°ΠΏΡ€Π°Π²ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ссылаСтся arry, являСтся массивом Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 10. Глядя Π²Π»Π΅Π²ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚ΠΈΠΏΠΎΠΌ элСмСнта являСтся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ‚ΠΈΠΏ int. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, arry β€” это ссылка Π½Π° массив дСсяти ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ.

Π—Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ объявлСниС массива ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΡ‰Π΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Π½Π°Ρ‡Π°Π² Π΅Π³ΠΎ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ с ΠΈΠΌΠ΅Π½ΠΈ массива ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΠ² Π΅Π³ΠΎ ΠΈΠ·Π½ΡƒΡ‚Ρ€ΠΈ Π½Π°Ρ€ΡƒΠΆΡƒ.

УпраТнСния Ρ€Π°Π·Π΄Π΅Π»Π° 3.5.1

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 3.27. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ функция txt_size() Π½Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° int. ΠžΠ±ΡŠΡΡΠ½ΠΈΡ‚Π΅, ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ нСдопустимы ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ?

unsigned buf_size = 1024;

(a) int ia[buf_size];   (b) int ia[4 * 7 - 14];

(c) int ia[txt_size()]; (d) char st[11] = "fundamental";

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 3.28. КакиС значСния содСрТатся Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… массивах?

string sa[10];

int ia[10];

int main() {

 string sa2[10];

 int ia2[10];

}

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 3.29. ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· нСдостатков использования массива вмСсто Π²Π΅ΠΊΡ‚ΠΎΡ€Π°.

3.5.2. Доступ ΠΊ элСмСнтам массива

Подобно Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠ°ΠΌ vector ΠΈ string, для доступа ΠΊ элСмСнтам массива ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ сСрийный ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ for ΠΈΠ»ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ индСксирования ([]) (subscript). Как ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, индСксы Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с 0. Для массива ΠΈΠ· дСсяти элСмСнтов ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ индСксы ΠΎΡ‚ 0 Π΄ΠΎ 9, Π° Π½Π΅ ΠΎΡ‚ 1 Π΄ΠΎ 10.

ΠŸΡ€ΠΈ использовании ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ для индСксирования массива Π΅Π΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ ΠΊΠ°ΠΊ ΠΈΠΌΠ΅ΡŽΡ‰ΡƒΡŽ Ρ‚ΠΈΠΏ size_t. Π’ΠΈΠΏ size_t β€” это ΠΌΠ°ΡˆΠΈΠ½ΠΎΠ·Π°Π²ΠΈΡΠΈΠΌΡ‹ΠΉ Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ, Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ достаточно большой для содСрТания Ρ€Π°Π·ΠΌΠ΅Ρ€Π° любого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² памяти. Π’ΠΈΠΏ size_t ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ cstddef, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся вСрсиСй Π‘++ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° stddef.h Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π‘.

Π—Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ фиксированного Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, массивы ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π²Π΅ΠΊΡ‚ΠΎΡ€Π°ΠΌ. НапримСр, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΎΡ†Π΅Π½ΠΎΠΊ ΠΈΠ· Ρ€Π°Π·Π΄Π΅Π»Π° 3.3.3, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ для хранСния счСтчиков кластСров массив.

// подсчСт количСства ΠΎΡ†Π΅Π½ΠΎΠΊ Π² кластСрС ΠΏΠΎ Π΄Π΅ΡΡΡ‚ΡŒ: 0--9,