Π Π°Π·Π½ΠΎΠ΅

ОбъявлСниС массива строк c: C#. ΠœΠ°ΡΡΠΈΠ²Ρ‹ строк Ρ‚ΠΈΠΏΠ° string[]. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

Руководство ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Π½Π° C#. ΠžΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы



  • Π§Ρ‚Π΅Π½ΠΈΠ΅ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ 2Β ΠΌΠΈΠ½


Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅

Для создания ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ new ΠΈ указываСтся Ρ‚ΠΈΠΏ элСмСнтов массива ΠΈ число элСмСнтов.You create a single-dimensional array using the new operator specifying the array element type and the number of elements. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ объявлСниС массива, содСрТащСго ΠΏΡΡ‚ΡŒ Ρ†Π΅Π»Ρ‹Ρ… чисСл:The following example declares an array of five integers:

int[] array = new int[5];

Π­Ρ‚ΠΎΡ‚ массив содСрТит элСмСнты с array[0] ΠΏΠΎ array[4].This array contains the elements from array[0] to array[4]. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ массива элСмСнты ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π΄ΠΎ значСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для Ρ‚ΠΈΠΏΠ° элСмСнта. Для Ρ†Π΅Π»Ρ‹Ρ… чисСл это 0.The elements of the array are initialized to the default value of the element type, 0 for integers.

ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ любой ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ элСмСнта. НапримСр, Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ приводится объявлСниС массива строк:Arrays can store any element type you specify, such as the following example that declares an array of strings:

string[] stringArray = new string[6];

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ массиваArray Initialization

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ массива ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ объявлСнии.You can initialize the elements of an array when you declare the array. Π’ этом случаС Π½Π΅ трСбуСтся спСцификатор Π΄Π»ΠΈΠ½Ρ‹, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ ΡƒΠΆΠ΅ Π·Π°Π΄Π°Π½ ΠΏΠΎ числу элСмСнтов Π² спискС ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.The length specifier isn’t needed because it’s inferred by the number of elements in the initialization list. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:For example:

int[] array1 = new int[] { 1, 3, 5, 7, 9 };

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΎ объявлСниС массива строк, Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт массива инициализируСтся с использованиСм названия дня:The following code shows a declaration of a string array where each array element is initialized by a name of a day:

string[] weekDays = new string[] { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };

Если массив инициализируСтся ΠΏΡ€ΠΈ объявлСнии, ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ new ΠΈ Ρ‚ΠΈΠΏ массива, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΊΠΎΠ΄Π΅.You can avoid the new expression and the array type when you initialize an array upon declaration, as shown in the following code. Π’Π°ΠΊΠΎΠΉ массив называСтся нСявно Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ:This is called an implicitly typed array:

int[] array2 = { 1, 3, 5, 7, 9 };
string[] weekDays2 = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ массива ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ Π±Π΅Π· Π΅Π΅ создания, Π½ΠΎ ΠΏΡ€ΠΈ присвоСнии Π½ΠΎΠ²ΠΎΠ³ΠΎ массива этой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ new.You can declare an array variable without creating it, but you must use the new operator when you assign a new array to this variable. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:For example:

int[] array3;
array3 = new int[] { 1, 3, 5, 7, 9 };   // OK
//array3 = {1, 3, 5, 7, 9};   // Error

ΠœΠ°ΡΡΠΈΠ²Ρ‹ Ρ‚ΠΈΠΏΠΎΠ² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈ ссылочных Ρ‚ΠΈΠΏΠΎΠ²Value Type and Reference Type Arrays

Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ объявлСниС массива:Consider the following array declaration:

SomeType[] array4 = new SomeType[10];

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ этого ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, являСтся Π»ΠΈ SomeType Ρ‚ΠΈΠΏΠΎΠΌ значСния ΠΈΠ»ΠΈ ссылочным Ρ‚ΠΈΠΏΠΎΠΌ.The result of this statement depends on whether SomeType is a value type or a reference type. Если это Ρ‚ΠΈΠΏ значСния, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ создаСт массив ΠΈΠ· 10 элСмСнтов, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ SomeType.If it’s a value type, the statement creates an array of 10 elements, each of which has the type SomeType. Если SomeType являСтся ссылочным Ρ‚ΠΈΠΏΠΎΠΌ, этот ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ создаСт массив ΠΈΠ· 10 элСмСнтов, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… инициализируСтся с использованиСм ссылки NULL.If SomeType is a reference type, the statement creates an array of 10 elements, each of which is initialized to a null reference. Π’ ΠΎΠ±ΠΎΠΈΡ… случаях элСмСнты ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π΄ΠΎ значСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для Ρ‚ΠΈΠΏΠ° элСмСнта.In both instances, the elements are initialized to the default value for the element type. Π‘ΠΌ. Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния ΠΎ Ρ‚ΠΈΠΏΠ°Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈ ссылочных Ρ‚ΠΈΠΏΠ°Ρ….For more information about value types and reference types, see Value types and Reference types.

Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅See also

ΠœΠ°ΡΡΠΈΠ²Ρ‹ Π² C++ β€” ΡƒΡ€ΠΎΠΊ 5

БСгодня ΠΌΡ‹ с ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ массивах. Π’Ρ‹ ΡƒΠΆΠ΅ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ пСрСмСнная β€” это ячСйка Π² памяти ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°, Π³Π΄Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ ΠΎΠ΄Π½ΠΎ СдинствСнноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Массив β€” это ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти, Π³Π΄Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ нСсколько Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.

Π’ΠΎΠ·ΡŒΠΌΠ΅ΠΌ Π³Ρ€ΡƒΠΏΠΏΡƒ студСнтов ΠΈΠ· дСсяти Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ. Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ… Π΅ΡΡ‚ΡŒ фамилия. Π‘ΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ студСнта β€” Π½Π΅ Ρ€Π°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ. Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ массив, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±ΡƒΠ΄ΡƒΡ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Ρ„Π°ΠΌΠΈΠ»ΠΈΠΈ всСх студСнтов.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ массива

string students[10] = {
    "Иванов", "ΠŸΠ΅Ρ‚Ρ€ΠΎΠ²", "Π‘ΠΈΠ΄ΠΎΡ€ΠΎΠ²",
    "АхмСдов", "Π•Ρ€ΠΎΡˆΠΊΠΈΠ½", "Π’Ρ‹Ρ…ΠΈΠ½",
    "АндССв", "Π’ΠΈΠ½ Π”ΠΈΠ·Π΅Π»ΡŒ", "ΠšΠ°Ρ€Ρ‚ΠΎΡˆΠΊΠΈΠ½", "Чубайс"
};

ОписаниС синтаксиса

Массив создаСтся ΠΏΠΎΡ‡Ρ‚ΠΈ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ обычная пСрСмСнная. Для хранСния дСсяти Ρ„Π°ΠΌΠΈΠ»ΠΈΠΉ Π½Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ массив, состоящий ΠΈΠ· 10 элСмСнтов. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ элСмСнтов массива задаСтся ΠΏΡ€ΠΈ Π΅Π³ΠΎ объявлСнии ΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ элСмСнты массива сразу ΠΏΡ€ΠΈ Π΅Π³ΠΎ создании, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки. Π’ Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобках значСния элСмСнтов массива ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· Π·Π°ΠΏΡΡ‚ΡƒΡŽ. Π’ ΠΊΠΎΠ½Ρ†Π΅ Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ„ΠΈΠ³ΡƒΡ€Π½ΠΎΠΉ
скобки ставится Ρ‚ΠΎΡ‡ΠΊΠ° с запятой.

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ вывСсти наш массив Π½Π° экран с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° cout.

#include <iostream>
#include <string>

int main()    
{
    std::string students[10] = {
        "Иванов", "ΠŸΠ΅Ρ‚Ρ€ΠΎΠ²", "Π‘ΠΈΠ΄ΠΎΡ€ΠΎΠ²",
        "АхмСдов", "Π•Ρ€ΠΎΡˆΠΊΠΈΠ½", "Π’Ρ‹Ρ…ΠΈΠ½",
        "АндССв", "Π’ΠΈΠ½ Π”ΠΈΠ·Π΅Π»ΡŒ", "ΠšΠ°Ρ€Ρ‚ΠΎΡˆΠΊΠΈΠ½", "Чубайс"
    };
    std::cout << students << std::endl; // ΠŸΡ‹Ρ‚Π°Π΅ΠΌΡΡ вывСсти вСсь массив нСпосрСдствСнно
    return 0;
}

Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠΉΡ‚Π΅ этот ΠΊΠΎΠ΄ ΠΈ посмотритС, Π½Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π“ΠΎΡ‚ΠΎΠ²ΠΎ? А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ запуститС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π΅Ρ‰Π΅ Ρ€Π°Π· ΠΈ сравнитС с ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ. Π’ ΠΌΠΎΠ΅ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС Π²Ρ‹Π²ΠΎΠ΄ Π±Ρ‹Π» ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ:

  • ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄: 0x7ffff8b85820
  • Π’Ρ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹Π²ΠΎΠ΄: 0x7fff7a335f90
  • Π’Ρ€Π΅Ρ‚ΠΈΠΉ Π²Ρ‹Π²ΠΎΠ΄: 0x7ffff847eb40

ΠœΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ выводится адрСс этого массива Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти, Π° Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ Π½Π΅ «Иванов» ΠΈ Β«ΠŸΠ΅Ρ‚Ρ€ΠΎΠ²Β».

Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ создании ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π΅ΠΉ выдСляСтся ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ мСсто Π² памяти. Если ΠΌΡ‹ объявляСм ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‚ΠΈΠΏΠ° int, Ρ‚ΠΎ Π½Π° машинном ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΎΠ½Π° описываСтся двумя ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ β€” Π΅Π΅ адрСсом ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Ρ…Ρ€Π°Π½ΠΈΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ….

ΠœΠ°ΡΡΠΈΠ²Ρ‹ Π² памяти хранятся Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. Массив Ρ‚ΠΈΠΏΠ° int ΠΈΠ· 10 элСмСнтов описываСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ адрСса Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ элСмСнта ΠΈ количСства Π±Π°ΠΉΡ‚, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ этот массив. Если для хранСния ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ†Π΅Π»ΠΎΠ³ΠΎ числа выдСляСтся 4 Π±Π°ΠΉΡ‚Π°, Ρ‚ΠΎ для массива ΠΈΠ· дСсяти Ρ†Π΅Π»Ρ‹Ρ… чисСл Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΎ 40 Π±Π°ΠΉΡ‚.

Π’Π°ΠΊ ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΆΠ΅, ΠΏΡ€ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΌ запускС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, адрСса Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ? Π­Ρ‚ΠΎ сдСлано для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ Π°Ρ‚Π°ΠΊ пСрСполнСния Π±ΡƒΡ„Π΅Ρ€Π°. Вакая тСхнология называСтся Ρ€Π°Π½Π΄ΠΎΠΌΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ адрСсного пространства ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ популярных ОБ.

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ вывСсти ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт массива β€” Ρ„Π°ΠΌΠΈΠ»ΠΈΡŽ студСнта Иванова.

#include <iostream>
#include <string>

int main()
{    
    std::string students[10] = {
        "Иванов", "ΠŸΠ΅Ρ‚Ρ€ΠΎΠ²", "Π‘ΠΈΠ΄ΠΎΡ€ΠΎΠ²",
        "АхмСдов", "Π•Ρ€ΠΎΡˆΠΊΠΈΠ½", "Π’Ρ‹Ρ…ΠΈΠ½",
        "АндССв", "Π’ΠΈΠ½ Π”ΠΈΠ·Π΅Π»ΡŒ", "ΠšΠ°Ρ€Ρ‚ΠΎΡˆΠΊΠΈΠ½", "Чубайс"
    };
    std::cout << students[0] <<  std::endl;
    return 0;
}

Π‘ΠΌΠΎΡ‚Ρ€ΠΈΠΌ, ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌ, запускаСм. УбСдились, Ρ‡Ρ‚ΠΎ вывСлся ΠΈΠΌΠ΅Π½Π½ΠΎ «Иванов».
Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ нумСрация элСмСнтов массива Π² C++ начинаСтся с нуля. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, фамилия ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ студСнта находится Π² students[0], Π° фамилия послСднСго β€” Π² students[9].

Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ языков программирования нумСрация элСмСнтов массива Ρ‚Π°ΠΊΠΆΠ΅ начинаСтся с нуля.

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ вывСсти список всСх студСнтов. Но сначала ΠΏΠΎΠ΄ΡƒΠΌΠ°Π΅ΠΌ, Π° Ρ‡Ρ‚ΠΎ Ссли Π±Ρ‹ вмСсто Π³Ρ€ΡƒΠΏΠΏΡ‹ ΠΈΠ· дСсяти студСнтов, Π±Ρ‹Π»Π° Π±Ρ‹ ΠΊΠ°Ρ„Π΅Π΄Ρ€Π° ΠΈΡ… ста, Ρ„Π°ΠΊΡƒΠ»ΡŒΡ‚Π΅Ρ‚ ΠΈΠ· тысячи, ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ вСсь унивСрситСт? Ну Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ ΠΆΠ΅ ΠΌΡ‹ ΠΏΠΈΡΠ°Ρ‚ΡŒ дСсятки тысяч строк с cout?

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅ Π½Π΅Ρ‚! ΠœΡ‹ возьмСм Π½Π° Π²ΠΎΠΎΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ Ρ†ΠΈΠΊΠ»Ρ‹, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±Ρ‹Π» написан ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ ΡƒΡ€ΠΎΠΊ.

Π’Ρ‹Π²ΠΎΠ΄ элСмСнтов массива Ρ‡Π΅Ρ€Π΅Π· Ρ†ΠΈΠΊΠ»

#include <iostream>
#include <string>

int main()
{
    std::string students[10] = {
        "Иванов", "ΠŸΠ΅Ρ‚Ρ€ΠΎΠ²", "Π‘ΠΈΠ΄ΠΎΡ€ΠΎΠ²",
        "АхмСдов", "Π•Ρ€ΠΎΡˆΠΊΠΈΠ½", "Π’Ρ‹Ρ…ΠΈΠ½",
        "АндССв", "Π’ΠΈΠ½ Π”ΠΈΠ·Π΅Π»ΡŒ", "ΠšΠ°Ρ€Ρ‚ΠΎΡˆΠΊΠΈΠ½", "Чубайс"
    };  
    for (int i = 0; i < 10; i++) {
        std::cout << students[i] << std::endl;
    }

    return 0;
}

Если Π±Ρ‹ Π½Π°ΠΌ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ массив ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… тысяч Ρ„Π°ΠΌΠΈΠ»ΠΈΠΉ, Ρ‚ΠΎ ΠΌΡ‹ Π±Ρ‹ просто ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ»ΠΈ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика Ρ†ΠΈΠΊΠ»Π° β€” строку for (...; i < 10; ...) Π·Π°ΠΌΠ΅Π½ΠΈΠ»ΠΈ Π½Π° for (...; i < 10000; ...).

Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅ Ρ‡Ρ‚ΠΎ счСтчик нашСго Ρ†ΠΈΠΊΠ»Π° начинаСтся с нуля, Π° заканчиваСтся дСвяткой. Если вмСсто ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° строгого нСравСнства β€” i < 10 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ «мСньшС, Π»ΠΈΠ±ΠΎ Ρ€Π°Π²Π½ΠΎΒ» β€” i <= 10, Ρ‚ΠΎ Π½Π° послСднСй ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° обратится ΠΊ Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ элСмСнту массива β€” students[10]. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ошибкам сСгмСнтации ΠΈ Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎΠΌΡƒ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π‘ΡƒΠ΄ΡŒΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ β€” ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ ошибки Π±Ρ‹Π²Π°Π΅Ρ‚ слоТно ΠΎΡ‚Π»ΠΎΠ²ΠΈΡ‚ΡŒ.

Массив, ΠΊΠ°ΠΊ ΠΈ Π»ΡŽΠ±ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ Π·Π°ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ значСниями ΠΏΡ€ΠΈ объявлСнии.

ОбъявлСниС массива Π±Π΅Π· ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ

string students[10];
// ΠΈΠ»ΠΈ
string teachers[5];

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ Ρ‚Π°ΠΊΠΎΠ³ΠΎ массива ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ содСрТат Π² сСбС «мусор» ΠΈΠ· Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ, Π½ΠΎ Π΅Ρ‰Π΅ Π½Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ, памяти. НСкоторыС компиляторы, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ GCC, Π·Π°ΠΏΠΎΠ»Π½ΡΡŽΡ‚ всС элСмСнты массива нулями ΠΏΡ€ΠΈ Π΅Π³ΠΎ создании.

ΠŸΡ€ΠΈ создании статичСского массива, для указания Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ константа. Π Π°Π·ΠΌΠ΅Ρ€ выдСляСмой памяти опрСдСляСтся Π½Π° этапС компиляции ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Π² процСссС выполнСния.

int n;
cin >> n;
string students[n]; /* НСвСрно */

Π’Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти Π² процСссС выполнСния Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с динамичСскими массивами. Но ΠΎ Π½ΠΈΡ… Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ·ΠΆΠ΅.

Π—Π°ΠΏΠΎΠ»Π½ΠΈΠΌ с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ пустой массив ΠΈΠ· 10 элСмСнтов.

Π—Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ массива с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹

#include <iostream>
#include <string>

using std::cout;
using std::cin;
using std::endl;

int main()
{    
        int arr[10];

        // ЗаполняСм массив с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹
        for (int i = 0; i < 10; i++) {
            cout << "[" << i + 1 << "]" << ": ";
            cin >> arr[i];
        }

        // И Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹ΠΉ массив.
        cout << "\nΠ’Π°Ρˆ массив: ";

        for (int i = 0; i < 10; ++i) {
            cout << arr[i] << " ";
        }

        cout << endl;

        return 0;
}

Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌ эту ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ Π΅Π΅ Ρ€Π°Π±ΠΎΡ‚Ρƒ.

Если Ρƒ вас Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΏΡ€ΠΈ компиляции исходников ΠΈΠ· ΡƒΡ€ΠΎΠΊΠΎΠ² β€” Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΎΡˆΠΈΠ±ΠΊΡƒ компилятора, ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π΅Π΅. Если Π²Ρ‹ нашли ΠΎΡˆΠΈΠ±ΠΊΡƒ Π² ΠΊΠΎΠ΄Π΅ β€” Π½Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΎΠ± этом Π² коммСнтариях ΠΊ ΡƒΡ€ΠΎΠΊΡƒ.

ΠœΠ°ΡΡΠΈΠ²Ρ‹ β€” ΠΎΡ‡Π΅Π½ΡŒ ваТная Π²Π΅Ρ‰ΡŒ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Автор совСтуСт Π²Π°ΠΌ Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΠΎΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² Ρ€Π°Π±ΠΎΡ‚Π΅ с Π½ΠΈΠΌΠΈ.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΡƒΡ€ΠΎΠΊ: Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² C++ β†’.

ΠœΠ°ΡΡΠΈΠ²Ρ‹ Π² C++ | Π£Ρ€ΠΎΠΊΠΈ Π‘++

  Обновл. 15 БСн 2020  | 

На ΡƒΡ€ΠΎΠΊΠ΅ ΠΎ структурах ΠΌΡ‹ ΡƒΠ·Π½Π°Π»ΠΈ, Ρ‡Ρ‚ΠΎ с ΠΈΡ… ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΏΠΎΠ΄ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ. Π­Ρ‚ΠΎ идСально, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ ΡΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·Π½Ρ‹Ρ… свойств. Однако удобство Ρ€Π°Π±ΠΎΡ‚Ρ‹ со структурами ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ большого количСства элСмСнтов оставляСт ΠΆΠ΅Π»Π°Ρ‚ΡŒ Π»ΡƒΡ‡ΡˆΠ΅Π³ΠΎ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ массив?

К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, структуры Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ СдинствСнным Π°Π³Ρ€Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ… Π² языкС C++. Π•ΡΡ‚ΡŒ Π΅Ρ‰Π΅ массив β€” совокупный Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊΠΎ всСм ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ… Ρ‡Π΅Ρ€Π΅Π· использованиС ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°.

Рассмотрим случай, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ тСстов 30 студСнтов Π² классС. Π‘Π΅Π· использования массива Π½Π°ΠΌ придСтся Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠΎΡ‡Ρ‚ΠΈ 30 ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…!

// ВыдСляСм 30 цСлочислСнных ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… (каТдая с Ρ€Π°Π·Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ)
int testResultStudent1;
int testResultStudent2;
int testResultStudent3;
// …
int testResultStudent30;



// ВыдСляСм 30 цСлочислСнных ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… (каТдая с Ρ€Π°Π·Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ)

int testResultStudent1;

int testResultStudent2;

int testResultStudent3;

// …

int testResultStudent30;

Π‘ использованиСм массива всё Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΠΏΡ€ΠΎΡ‰Π΅. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ строка эквивалСнтна ΠΊΠΎΠ΄Ρƒ, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌΡƒ Π²Ρ‹ΡˆΠ΅:

int testResult[30]; // выдСляСм 30 цСлочислСнных ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ фиксированный массив



int testResult[30]; // выдСляСм 30 цСлочислСнных ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ фиксированный массив

Π’ объявлСнии ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ массива ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки [], Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ компилятору, Ρ‡Ρ‚ΠΎ это пСрСмСнная массива (Π° Π½Π΅ обычная пСрСмСнная), Π° Π² скобках β€” количСство выдСляСмых элСмСнтов (это называСтся Π΄Π»ΠΈΠ½ΠΎΠΉ ΠΈΠ»ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ массива).

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅, ΠΌΡ‹ объявили фиксированный массив с ΠΈΠΌΠ΅Π½Π΅ΠΌ testResult ΠΈ Π΄Π»ΠΈΠ½ΠΎΠΉ 30. Ѐиксированный массив (ΠΈΠ»ΠΈ «массив фиксированной Π΄Π»ΠΈΠ½Ρ‹Β») прСдставляСт собой массив, Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ извСстСн Π²ΠΎ врСмя компиляции. ΠŸΡ€ΠΈ создании testResult, компилятор Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ 30 цСлочислСнных ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ….

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ массива

КаТдая ΠΈΠ· ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² массивС называСтся элСмСнтом. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ своих собствСнных ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠΌΠ΅Π½. ВмСсто этого для доступа ΠΊ Π½ΠΈΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ имя массива вмСстС с ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ индСкса [] ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ называСтся индСксом, ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сообщаСт компилятору, ΠΊΠ°ΠΊΠΎΠΉ элСмСнт ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ. Π­Ρ‚ΠΎΡ‚ процСсс называСтся индСксированиСм массива.

Π’ Π²Ρ‹ΡˆΠ΅ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ элСмСнтом Π² нашСм массивС являСтся testResult[0], Π²Ρ‚ΠΎΡ€ΠΎΠΉ β€” testResult[1], дСсятый β€” testResult[9], послСдний β€” testResult[29]. Π₯ΠΎΡ€ΠΎΡˆΠΎ, Ρ‡Ρ‚ΠΎ ΡƒΠΆΠ΅ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΈ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ ΠΊΡƒΡ‡Ρƒ Ρ€Π°Π·Π½Ρ‹Ρ… (Ρ…ΠΎΡ‚ΡŒ ΠΈ ΠΏΠΎΡ…ΠΎΠΆΠΈΡ…) ΠΈΠΌΠ΅Π½ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… β€” для доступа ΠΊ Ρ€Π°Π·Π½Ρ‹ΠΌ элСмСнтам Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ индСкс.

Π’Π°ΠΆΠ½ΠΎ: Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ повсСднСвной ΠΆΠΈΠ·Π½ΠΈ, отсчСт Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈ Π² языкС Π‘++ всСгда начинаСтся с 0, Π° Π½Π΅ с 1!

Π’ массивС Π΄Π»ΠΈΠ½ΠΎΠΉ N элСмСнты массива Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΠ½ΡƒΠΌΠ΅Ρ€ΠΎΠ²Π°Π½Ρ‹ ΠΎΡ‚ 0 Π΄ΠΎ N-1! Π­Ρ‚ΠΎ называСтся Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠΌ массива.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с использованиСм массива

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅, Ρ‚Π°ΠΊ ΠΈ индСксированиС массива:

#include <iostream>

int main()
{
int array[5]; // массив ΠΈΠ· пяти чисСл
array[0] = 3; // индСкс ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ элСмСнта — 0 (Π½ΡƒΠ»Π΅Π²ΠΎΠΉ элСмСнт)
array[1] = 2;
array[2] = 4;
array[3] = 8;
array[4] = 12; // индСкс послСднСго элСмСнта — 4

std::cout << «The array element with the smallest index has the value » << array[0] << «\n»;
std::cout << «The sum of the first 5 numbers is » << array[0] + array[1] + array[2] + array[3] + array[4] << «\n»;

return 0;
}



#include <iostream>

int main()

{

Β Β Β Β int array[5]; // массив ΠΈΠ· пяти чисСл

Β Β Β Β array[0] = 3; // индСкс ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ элСмСнта — 0 (Π½ΡƒΠ»Π΅Π²ΠΎΠΉ элСмСнт)

Β Β Β Β array[1] = 2;

Β Β Β Β array[2] = 4;

Β Β Β Β array[3] = 8;

Β Β Β Β array[4] = 12; // индСкс послСднСго элСмСнта — 4

Β Β Β Β std::cout << «The array element with the smallest index has the value » << array[0] << «\n»;

Β Β Β Β std::cout << «The sum of the first 5 numbers is » << array[0] + array[1] + array[2] + array[3] + array[4] << «\n»;

Β Β Β Β return 0;

}

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

The array element with the smallest index has the value 3
The sum of the first 5 numbers is 29

Π’ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ массивы

Массив ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ любого Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ…. НапримСр, объявляСм массив Ρ‚ΠΈΠΏΠ° double:

#include <iostream>

int main()
{
double array[3]; // выдСляСм 3 ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΠ° double
array[0] = 3.5;
array[1] = 2.4;
array[2] = 3.4;

std::cout << «The average is » << (array[0] + array[1] + array[2]) / 3 << «\n»;

return 0;
}



#include <iostream>

int main()

{

Β Β Β Β double array[3]; // выдСляСм 3 ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΠ° double

Β Β Β Β array[0] = 3.5;

Β Β Β Β array[1] = 2.4;

Β Β Β Β array[2] = 3.4;

Β Β Β Β std::cout << «The average is » << (array[0] + array[1] + array[2]) / 3 << «\n»;

Β Β Β Β return 0;

}

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

The average is 3.1

ΠœΠ°ΡΡΠΈΠ²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΈΠ· структур, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

struct Rectangle
{
int length;
int width;
};
Rectangle rects[4]; // объявляСм массив с 4-мя ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°ΠΌΠΈ



struct Rectangle

{

Β Β Β Β int length;

Β Β Β Β int width;

};

Rectangle rects[4]; // объявляСм массив с 4-мя ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°ΠΌΠΈ

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Ρ‡Π»Π΅Π½Ρƒ структуры ΠΈΠ· элСмСнта массива, сначала Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ элСмСнт массива, Π·Π°Ρ‚Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π²Ρ‹Π±ΠΎΡ€Π° Ρ‡Π»Π΅Π½Π° структуры, Π° Π·Π°Ρ‚Π΅ΠΌ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹ΠΉ Ρ‡Π»Π΅Π½ структуры:

Π˜Π½Π΄Π΅ΠΊΡΡ‹ массивов

Π’ языкС C++ индСксы массивов всСгда Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ… (Ρ‚.Π΅. Ρ‚ΠΈΠΏΠ° char, short, int, long, long long, bool ΠΈ Ρ‚.Π΄.). Π­Ρ‚ΠΈ индСксы ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ константными значСниями, Π»ΠΈΠ±ΠΎ нСконстантными значСниями. НапримСр:

int array[4]; // объявляСм массив длиной 4

// Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π»ΠΈΡ‚Π΅Ρ€Π°Π» (константу) Π² качСствС индСкса
array[2] = 8; // Ρ…ΠΎΡ€ΠΎΡˆΠΎ

// Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ пСрСчислСниС (константу) Π² качСствС индСкса
enum Animals
{
ANIMAL_CAT = 3
};
array[ANIMAL_CAT] = 5; // Ρ…ΠΎΡ€ΠΎΡˆΠΎ

// Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ (Π½Π΅ константу) Π² качСствС индСкса
short index = 4;
array[index] = 8; // Ρ…ΠΎΡ€ΠΎΡˆΠΎ



int array[4]; // объявляСм массив длиной 4

// Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π»ΠΈΡ‚Π΅Ρ€Π°Π» (константу) Π² качСствС индСкса

array[2] = 8; // Ρ…ΠΎΡ€ΠΎΡˆΠΎ

// Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ пСрСчислСниС (константу) Π² качСствС индСкса

enum Animals

{

Β Β Β Β ANIMAL_CAT = 3

};

array[ANIMAL_CAT] = 5; // Ρ…ΠΎΡ€ΠΎΡˆΠΎ

// Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ (Π½Π΅ константу) Π² качСствС индСкса

short index = 4;

array[index] = 8; // Ρ…ΠΎΡ€ΠΎΡˆΠΎ

ОбъявлСниС массивов фиксированного Ρ€Π°Π·ΠΌΠ΅Ρ€Π°

ΠŸΡ€ΠΈ объявлСнии массива фиксированного Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, Π΅Π³ΠΎ Π΄Π»ΠΈΠ½Π° (ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹ΠΌΠΈ скобками) Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ константой Ρ‚ΠΈΠΏΠ° compile-time (которая опрСдСляСтся Π²ΠΎ врСмя компиляции). Π’ΠΎΡ‚ нСсколько Ρ€Π°Π·Π½Ρ‹Ρ… способов объявлСния массивов с фиксированным Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ:

// Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π»ΠΈΡ‚Π΅Ρ€Π°Π»
int array[7]; // Ρ…ΠΎΡ€ΠΎΡˆΠΎ

// Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ макрос-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с тСкст_Π·Π°ΠΌΠ΅Π½Π° Π² качСствС символьной константы
#define ARRAY_WIDTH 4
int array[ARRAY_WIDTH]; // синтаксичСски Ρ…ΠΎΡ€ΠΎΡˆΠΎ, Π½ΠΎ Π½Π΅ Π΄Π΅Π»Π°ΠΉΡ‚Π΅ этого

// Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½ΡƒΡŽ константу
const int arrayWidth = 7;
int array[arrayWidth]; // Ρ…ΠΎΡ€ΠΎΡˆΠΎ

// Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒ
enum ArrayElements
{
MIN_ARRAY_WIDTH = 3
};
int array[MIN_ARRAY_WIDTH]; // Ρ…ΠΎΡ€ΠΎΡˆΠΎ

// Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π½Π΅ΠΊΠΎΠ½ΡΡ‚Π°Π½Ρ‚Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ
int width;
std::cin >> width;
int array[width]; // ΠΏΠ»ΠΎΡ…ΠΎ: width Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ константой Ρ‚ΠΈΠΏΠ° compile-time!

// Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΊΠΎΠ½ΡΡ‚Π°Π½Ρ‚Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‚ΠΈΠΏΠ° runtime
int temp = 8;
const int width = temp;
int array[width]; // ΠΏΠ»ΠΎΡ…ΠΎ: здСсь width являСтся константой Ρ‚ΠΈΠΏΠ° runtime, Π½ΠΎ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ константой Ρ‚ΠΈΠΏΠ° compile-time!


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

// Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π»ΠΈΡ‚Π΅Ρ€Π°Π»

int array[7]; // Ρ…ΠΎΡ€ΠΎΡˆΠΎ

// Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ макрос-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с тСкст_Π·Π°ΠΌΠ΅Π½Π° Π² качСствС символьной константы

#define ARRAY_WIDTH 4

int array[ARRAY_WIDTH]; // синтаксичСски Ρ…ΠΎΡ€ΠΎΡˆΠΎ, Π½ΠΎ Π½Π΅ Π΄Π΅Π»Π°ΠΉΡ‚Π΅ этого

// Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½ΡƒΡŽ константу

const int arrayWidth = 7;

int array[arrayWidth]; // Ρ…ΠΎΡ€ΠΎΡˆΠΎ

// Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒ

enum ArrayElements

{

Β Β Β Β MIN_ARRAY_WIDTH = 3

};

int array[MIN_ARRAY_WIDTH]; // Ρ…ΠΎΡ€ΠΎΡˆΠΎ

// Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π½Π΅ΠΊΠΎΠ½ΡΡ‚Π°Π½Ρ‚Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ

int width;

std::cin >> width;

int array[width]; // ΠΏΠ»ΠΎΡ…ΠΎ: width Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ константой Ρ‚ΠΈΠΏΠ° compile-time!

// Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΊΠΎΠ½ΡΡ‚Π°Π½Ρ‚Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‚ΠΈΠΏΠ° runtime

int temp = 8;

const int width = temp;

int array[width]; // ΠΏΠ»ΠΎΡ…ΠΎ: здСсь width являСтся константой Ρ‚ΠΈΠΏΠ° runtime, Π½ΠΎ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ константой Ρ‚ΠΈΠΏΠ° compile-time!

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Π² Π΄Π²ΡƒΡ… послСдних случаях ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π΄Π»ΠΈΠ½Π° массива Π½Π΅ являСтся константой Ρ‚ΠΈΠΏΠ° compile-time. НСкоторыС компиляторы ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ использованиС Ρ‚Π°ΠΊΠΈΡ… массивов, Π½ΠΎ ΠΎΠ½ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌΠΈ Π² соотвСтствии со стандартами языка C++ ΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…, написанных Π½Π° C++.

Π§ΡƒΡ‚ΡŒ-Ρ‡ΡƒΡ‚ΡŒ ΠΎ динамичСских массивах

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ массивам фиксированного Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΏΠ°ΠΌΡΡ‚ΡŒ выдСляСтся Π²ΠΎ врСмя компиляции, Ρ‚ΠΎ здСсь ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ Π΄Π²Π° ограничСния:

Β  Β ΠœΠ°ΡΡΠΈΠ²Ρ‹ фиксированного Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Π»ΠΈΠ½Ρƒ, ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΡƒΡŽ Π½Π° любом ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ Π²Π²ΠΎΠ΄Π΅ ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ вычисляСтся Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (runtime).

Β   ЀиксированныС массивы ΠΈΠΌΠ΅ΡŽΡ‚ Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Π΄Π»ΠΈΠ½Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ нСльзя ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ.

Π’ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… случаях эти ограничСния ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π½Ρ‹ΠΌΠΈ. К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, C++ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ Ρ‚ΠΈΠΏ массивов, извСстный ΠΊΠ°ΠΊ динамичСский массив. Π Π°Π·ΠΌΠ΅Ρ€ Ρ‚Π°ΠΊΠΎΠ³ΠΎ массива ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ установлСн ​​во врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ. Однако созданиС динамичСских массивов нСсколько слоТнСС фиксированных, поэтому ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎΠ± этом нСсколько ΠΏΠΎΠ·ΠΆΠ΅.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

ЀиксированныС массивы ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ простой способ выдСлСния ΠΈ использования Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ… Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Ρ€Π°Π·ΠΌΠ΅Ρ€ массива извСстСн Π²ΠΎ врСмя компиляции.

На ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΡƒΡ€ΠΎΠΊΠ΅ ΠΌΡ‹ рассмотрим большС Ρ‚Π΅ΠΌ, связанных с фиксированными массивами.

ΠžΡ†Π΅Π½ΠΈΡ‚ΡŒ ΡΡ‚Π°Ρ‚ΡŒΡŽ:

Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ°…

ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ Π² ΡΠΎΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… сСтях:

Руководство ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Π½Π° C#. ΠœΠ°ΡΡΠΈΠ²Ρ‹



  • Π§Ρ‚Π΅Π½ΠΈΠ΅ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ 2Β ΠΌΠΈΠ½


Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅

Π’ структурС Π΄Π°Π½Π½Ρ‹Ρ… массива ΠΌΠΎΠΆΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ нСсколько ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°.You can store multiple variables of the same type in an array data structure. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ массив, слСдуСт ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ Π΅Π³ΠΎ элСмСнтов.You declare an array by specifying the type of its elements. Если трСбуСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ массив ΠΌΠΎΠ³ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ элСмСнты любого Ρ‚ΠΈΠΏΠ°, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ object Π² качСствС Π΅Π³ΠΎ Ρ‚ΠΈΠΏΠ°.If you want the array to store elements of any type, you can specify object as its type. Π’ ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ систСмС Ρ‚ΠΈΠΏΠΎΠ² C# всС Ρ‚ΠΈΠΏΡ‹, стандартныС ΠΈ опрСдСляСмыС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ, ссылочныС Ρ‚ΠΈΠΏΡ‹ ΠΈ Ρ‚ΠΈΠΏΡ‹ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΈΠ»ΠΈ косвСнно Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ΡΡ ΠΈΠ· Object.In the unified type system of C#, all types, predefined and user-defined, reference types and value types, inherit directly or indirectly from Object.

type[] arrayName;

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Example

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы, ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы ΠΈ массивы массивов:The following example creates single-dimensional, multidimensional, and jagged arrays:

class TestArraysClass
{
    static void Main()
    {
        // Declare a single-dimensional array of 5 integers.
        int[] array1 = new int[5];

        // Declare and set array element values.
        int[] array2 = new int[] { 1, 3, 5, 7, 9 };

        // Alternative syntax.
        int[] array3 = { 1, 2, 3, 4, 5, 6 };

        // Declare a two dimensional array.
        int[,] multiDimensionalArray1 = new int[2, 3];

        // Declare and set array element values.
        int[,] multiDimensionalArray2 = { { 1, 2, 3 }, { 4, 5, 6 } };

        // Declare a jagged array.
        int[][] jaggedArray = new int[6][];

        // Set the values of the first array in the jagged array structure.
        jaggedArray[0] = new int[4] { 1, 2, 3, 4 };
    }
}

ΠžΠ±Ρ‰ΠΈΠ΅ свСдСния ΠΎ массивахArray overview

Массив ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ свойства:An array has the following properties:

  • Массив ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΌ, ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΌ ΠΈΠ»ΠΈ массивом массивов.An array can be Single-Dimensional, Multidimensional or Jagged.
  • ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ ΠΈ Π΄Π»ΠΈΠ½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ Π·Π°Π΄Π°ΡŽΡ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° создаСтся экзСмпляр массива.The number of dimensions and the length of each dimension are established when the array instance is created. Π­Ρ‚ΠΈ значСния нСльзя ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π²ΠΎ врСмя сущСствования экзСмпляра.These values can’t be changed during the lifetime of the instance.
  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ значСния числовых элСмСнтов массива Ρ€Π°Π²Π½Ρ‹ Π½ΡƒΠ»ΡŽ, ΠΈ элСмСнтам ссылки присвоСно Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ NULL.The default values of numeric array elements are set to zero, and reference elements are set to null.
  • Π’ массивС массивов элСмСнты ΡΠ²Π»ΡΡŽΡ‚ΡΡ ссылочными Ρ‚ΠΈΠΏΠ°ΠΌΠΈ ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ null.A jagged array is an array of arrays, and therefore its elements are reference types and are initialized to null.
  • ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΎΡ‚ нуля: массив с n элСмСнтами индСксируСтся ΠΎΡ‚ 0 Π΄ΠΎ n-1.Arrays are zero indexed: an array with n elements is indexed from 0 to n-1.
  • Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ массива ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ любой Ρ‚ΠΈΠΏ, Π² Ρ‚ΠΎΠΌ числС Ρ‚ΠΈΠΏ массива.Array elements can be of any type, including an array type.
  • Π’ΠΈΠΏΡ‹ массивов — это ссылочныС Ρ‚ΠΈΠΏΡ‹, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Π΅ ΠΎΡ‚ абстрактного Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Array.Array types are reference types derived from the abstract base type Array. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ этот Ρ‚ΠΈΠΏ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ IEnumerable ΠΈ IEnumerable<T>, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ Π² Ρ†ΠΈΠΊΠ»Π΅ foreach Π»ΡŽΠ±Ρ‹Π΅ массивы C#.Since this type implements IEnumerable and IEnumerable<T>, you can use foreach iteration on all arrays in C#.

БпСцификация языка C#C# language specification

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния см. Π² спСцификации языка C#.For more information, see the C# Language Specification. БпСцификация языка являСтся ΠΏΡ€Π΅Π΄ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΌ источником ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ синтаксисС ΠΈ использовании языка C#.The language specification is the definitive source for C# syntax and usage.

Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅See also

ΠžΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы

— Руководство ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Π½Π° C #

  • 2 ΠΌΠΈΠ½ΡƒΡ‚Ρ‹ Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅

Π’Ρ‹ создаСтС ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ new, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΉ Ρ‚ΠΈΠΏ элСмСнта массива ΠΈ количСство элСмСнтов. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ массив ΠΈΠ· пяти Ρ†Π΅Π»Ρ‹Ρ… чисСл:

  int [] массив = Π½ΠΎΠ²Ρ‹ΠΉ int [5];
  

Π­Ρ‚ΠΎΡ‚ массив содСрТит элСмСнты ΠΎΡ‚ массива [0] Π΄ΠΎ массива [4] .Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ массива ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для Ρ‚ΠΈΠΏΠ° элСмСнта, 0 для Ρ†Π΅Π»Ρ‹Ρ… чисСл.

ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ любой Ρ‚ΠΈΠΏ элСмСнта, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ ΡƒΠΊΠ°ΠΆΠ΅Ρ‚Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‰Π΅ΠΌ массив строк:

  строка [] stringArray = новая строка [6];
  

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ массива

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ элСмСнты массива ΠΏΡ€ΠΈ объявлСнии массива. Π‘ΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π΄Π»ΠΈΠ½Ρ‹ Π½Π΅ Π½ΡƒΠΆΠ΅Π½, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ опрСдСляСтся количСством элСмСнтов Π² спискС ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.НапримСр:

  int [] array1 = new int [] {1, 3, 5, 7, 9};
  

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΊΠΎΠ΄Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ объявлСниС массива строк, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт массива инициализируСтся ΠΈΠΌΠ΅Π½Π΅ΠΌ дня:

  строка [] weekDays = новая строка [] {«Вс», «Пн», Β«Π’Ρ‚Β», Β«Π‘Ρ€Β», Β«Π§Ρ‚Β», Β«ΠŸΡ‚Β», Β«Π‘Π±Β»};
  

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π½ΠΎΠ²ΠΎΠ³ΠΎ выраТСния ΠΈ Ρ‚ΠΈΠΏΠ° массива ΠΏΡ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ массива послС объявлСния, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΊΠΎΠ΄Π΅. Π­Ρ‚ΠΎ называСтся нСявно Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ массивом:

  int [] array2 = {1, 3, 5, 7, 9};
string [] weekDays2 = {«Вс», «Пн», Β«Π’Ρ‚Β», Β«Π‘Ρ€Β», Β«Π§Ρ‚Β», Β«ΠŸΡ‚Β», Β«Π‘Π±Β»};
  

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ массива, Π½Π΅ создавая Π΅Π΅, Π½ΠΎ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ new , ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π½Π°Π·Π½Π°Ρ‡Π°Π΅Ρ‚Π΅ Π½ΠΎΠ²Ρ‹ΠΉ массив этой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.НапримСр:

  int [] array3;
array3 = Π½ΠΎΠ²Ρ‹ΠΉ int [] {1, 3, 5, 7, 9}; // Π’ ΠŸΠžΠ Π―Π”ΠšΠ•
// array3 = {1, 3, 5, 7, 9}; // Ошибка
  

Π’ΠΈΠΏ значСния ΠΈ массив ссылочного Ρ‚ΠΈΠΏΠ°

Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ объявлСниС массива:

  SomeType [] array4 = Π½ΠΎΠ²Ρ‹ΠΉ SomeType [10];
  

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ этого ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, являСтся Π»ΠΈ SomeType Ρ‚ΠΈΠΏΠΎΠΌ значСния ΠΈΠ»ΠΈ ссылочным Ρ‚ΠΈΠΏΠΎΠΌ. Если это Ρ‚ΠΈΠΏ значСния, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ создаСт массив ΠΈΠ· 10 элСмСнтов, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ SomeType .Если SomeType являСтся ссылочным Ρ‚ΠΈΠΏΠΎΠΌ, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ создаСт массив ΠΈΠ· 10 элСмСнтов, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… инициализируСтся пустой ссылкой. Π’ ΠΎΠ±ΠΎΠΈΡ… случаях элСмСнты ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для Ρ‚ΠΈΠΏΠ° элСмСнта. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния ΠΎ Ρ‚ΠΈΠΏΠ°Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈ ссылочных Ρ‚ΠΈΠΏΠ°Ρ… см. Π’ Ρ€Π°Π·Π΄Π΅Π»Π°Ρ… Π’ΠΈΠΏΡ‹ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈ ссылочныС Ρ‚ΠΈΠΏΡ‹.

Π‘ΠΌ. Π’Π°ΠΊΠΆΠ΅

.ΠœΠ°ΡΡΠΈΠ²Ρ‹

— Руководство ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Π½Π° C #

  • 2 ΠΌΠΈΠ½ΡƒΡ‚Ρ‹ Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ нСсколько ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π² структурС Π΄Π°Π½Π½Ρ‹Ρ… массива. Π’Ρ‹ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚Π΅ массив, указывая Ρ‚ΠΈΠΏ Π΅Π³ΠΎ элСмСнтов. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² массивС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡΡŒ элСмСнты любого Ρ‚ΠΈΠΏΠ°, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² качСствС Π΅Π³ΠΎ Ρ‚ΠΈΠΏΠ°.Π’ ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ систСмС Ρ‚ΠΈΠΏΠΎΠ² C # всС Ρ‚ΠΈΠΏΡ‹, ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΈ опрСдСляСмыС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ, ссылочныС Ρ‚ΠΈΠΏΡ‹ ΠΈ Ρ‚ΠΈΠΏΡ‹ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ прямо ΠΈΠ»ΠΈ косвСнно Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ΡΡ ΠΎΡ‚ Object.

  Ρ‚ΠΈΠΏ [] имя_массива;
  

ΠŸΡ€ΠΈΠΌΠ΅Ρ€

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅, ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ ΠΈ Π·ΡƒΠ±Ρ‡Π°Ρ‚Ρ‹Π΅ массивы:

  класс TestArraysClass
{
    статичСская пустота Main ()
    {
        // ΠžΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив ΠΈΠ· 5 Ρ†Π΅Π»Ρ‹Ρ… чисСл.
        int [] array1 = Π½ΠΎΠ²Ρ‹ΠΉ int [5];

        // ОбъявлСниС ΠΈ установка Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ элСмСнтов массива.int [] array2 = Π½ΠΎΠ²Ρ‹ΠΉ int [] {1, 3, 5, 7, 9};

        // ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ синтаксис.
        int [] array3 = {1, 2, 3, 4, 5, 6};

        // ΠžΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив.
        int [,] multiDimensionalArray1 = Π½ΠΎΠ²Ρ‹ΠΉ int [2, 3];

        // ОбъявлСниС ΠΈ установка Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ элСмСнтов массива.
        int [,] multiDimensionalArray2 = {{1, 2, 3}, {4, 5, 6}};

        // ОбъявляСм массив с Π·ΡƒΠ±Ρ‡Π°Ρ‚Ρ‹ΠΌΠΈ краями.
        int [] [] jaggedArray = Π½ΠΎΠ²Ρ‹ΠΉ int [6] [];

        // УстанавливаСм значСния ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ массива Π² структурС Π·ΡƒΠ±Ρ‡Π°Ρ‚ΠΎΠ³ΠΎ массива.jaggedArray [0] = Π½ΠΎΠ²Ρ‹ΠΉ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» [4] {1, 2, 3, 4};
    }
}
  

ΠžΠ±Π·ΠΎΡ€ массива

Массив ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ свойства:

  • Массив ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΌ, ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΌ ΠΈΠ»ΠΈ Π·ΡƒΠ±Ρ‡Π°Ρ‚Ρ‹ΠΌ.
  • ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ ΠΈ Π΄Π»ΠΈΠ½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ измСрСния ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ создании экзСмпляра массива. Π­Ρ‚ΠΈ значСния нСльзя ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ сущСствования экзСмпляра.
  • ЗначСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для элСмСнтов числового массива Ρ€Π°Π²Π½Ρ‹ Π½ΡƒΠ»ΡŽ, Π° ссылочныС элСмСнты Ρ€Π°Π²Π½Ρ‹ Π½ΡƒΠ»ΡŽ.
  • НСровный массив — это массив массивов, поэтому Π΅Π³ΠΎ элСмСнты ΡΠ²Π»ΡΡŽΡ‚ΡΡ ссылочными Ρ‚ΠΈΠΏΠ°ΠΌΠΈ ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ null .
  • ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ Π½ΡƒΠ»Π΅Π²ΠΎΠΉ индСкс: массив ΠΈΠ· n элСмСнтов индСксируСтся ΠΎΡ‚ 0 Π΄ΠΎ n-1 .
  • Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ массива ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ любого Ρ‚ΠΈΠΏΠ°, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Ρ‚ΠΈΠΏ массива.
  • Π’ΠΈΠΏΡ‹ массивов — это ссылочныС Ρ‚ΠΈΠΏΡ‹, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Π΅ ΠΎΡ‚ абстрактного Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Array. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ этот Ρ‚ΠΈΠΏ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ IEnumerable ΠΈ IEnumerable, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ foreach для всСх массивов Π² C #.

БпСцификация языка C #

Для получСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ см. Π‘ΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ языка C #. БпСцификация языка являСтся ΠΈΡΡ‡Π΅Ρ€ΠΏΡ‹Π²Π°ΡŽΡ‰ΠΈΠΌ источником синтаксиса ΠΈ использования C #.

Π‘ΠΌ. Π’Π°ΠΊΠΆΠ΅

.

массивов C ++ (с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ)

Π’ C ++ массив — это пСрСмСнная, которая ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ нСсколько Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. НапримСр,

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π² классС 27 ΡƒΡ‡Π΅Π½ΠΈΠΊΠΎΠ², ΠΈ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΎΡ†Π΅Π½ΠΊΠΈ всСх ΠΈΠ· Π½ΠΈΡ…. ВмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ 27 ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ просто ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ массив:

  Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ сорт [27];  

Π—Π΄Π΅ΡΡŒ grade — это массив, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ максимум 27 элСмСнтов Ρ‚ΠΈΠΏΠ° double .

Π’ C ++ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈ Ρ‚ΠΈΠΏ массивов Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹ послС Π΅Π³ΠΎ объявлСния.


ОбъявлСниС массива C ++

  dataType имя_массива [Ρ€Π°Π·ΠΌΠ΅Ρ€_массива];  

НапримСр,

  int x [6];  

Π—Π΄Π΅ΡΡŒ,

  • int — Ρ‚ΠΈΠΏ сохраняСмого элСмСнта
  • x — имя массива
  • 6 — Ρ€Π°Π·ΠΌΠ΅Ρ€ массива

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ доступа Π² массивС C ++

Π’ C ++ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт массива связан с числом.Число извСстно ΠΊΠ°ΠΊ индСкс массива. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ элСмСнтам массива, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ эти индСксы.

  // синтаксис для доступа ΠΊ элСмСнтам массива
массив [индСкс];  

Рассмотрим массив x , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ Π²Ρ‹ΡˆΠ΅.

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ массива Π² C ++

НСсколько Π²Π΅Ρ‰Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ слСдуСт ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ:


Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ массива C ++

Π’ C ++ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ массив Π²ΠΎ врСмя объявлСния. НапримСр,

  // объявляСм ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ ΠΈ массив
int x [6] = {19, 10, 8, 17, 9, 15};  

C ++ Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ массива ΠΈ ΠΈΡ… Π΄Π°Π½Π½Ρ‹Π΅

Π”Ρ€ΡƒΠ³ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ массива Π²ΠΎ врСмя объявлСния:

  // объявляСм ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ массив
int x [] = {19, 10, 8, 17, 9, 15};  

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ Π½Π΅ упомянули Ρ€Π°Π·ΠΌΠ΅Ρ€ массива.Π’ Ρ‚Π°ΠΊΠΈΡ… случаях компилятор автоматичСски вычисляСт Ρ€Π°Π·ΠΌΠ΅Ρ€.


Массив C ++ с пустыми элСмСнтами

Π’ C ++, Ссли массив ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ n , ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΄ΠΎ n элСмСнтов Π² массивС. Однако Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚, Ссли ΠΌΡ‹ сохраним мСньшС n элСмСнтов.

НапримСр,

  // Ρ…Ρ€Π°Π½ΠΈΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 3 элСмСнта Π² массивС
int x [6] = {19, 10, 8};  

Π—Π΄Π΅ΡΡŒ массив x ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ 6 .Однако ΠΌΡ‹ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ Π΅Π³ΠΎ всСго с 3 элСмСнтами.

Π’ Ρ‚Π°ΠΊΠΈΡ… случаях компилятор присваиваСт ΠΎΡΡ‚Π°Π²ΡˆΠΈΠΌΡΡ мСстам случайныС значСния. Часто это случайноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ просто 0 .

ΠŸΡƒΡΡ‚Ρ‹ΠΌ элСмСнтам массива автоматичСски присваиваСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0


Как Π²ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΈ Ρ€Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ элСмСнты массива?

  int mark [5] = {19, 10, 8, 17, 9}

// мСняСм 4-ΠΉ элСмСнт Π½Π° 9
ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΊΠ° [3] = 9;

// ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌ Π²Π²ΠΎΠ΄ ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ
// сохраняСм Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ
cin >> mark [2];


// ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌ Π²Π²ΠΎΠ΄ ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ
// вставляСм Π² i-ю ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ
cin >> mark [i-1];

// Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт массива
cout << mark [0];

// Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ i-ΠΉ элСмСнт массива
cout >> mark [i-1];  

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 1: ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ элСмСнтов массива

  #include 
ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ пространство ΠΈΠΌΠ΅Π½ std;

int main () {
    int числа [5] = {7, 5, 6, 12, 35};

    cout << "Π¦ΠΈΡ„Ρ€Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅:";

    // ΠŸΠ΅Ρ‡Π°Ρ‚ΡŒ элСмСнтов массива
    // использованиС Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° для Ρ†ΠΈΠΊΠ»Π°
    for (const int & n: numbers) {
        cout << n << "";
    }


    cout << "\ nЦифры:";

    // ΠŸΠ΅Ρ‡Π°Ρ‚ΡŒ элСмСнтов массива
    // ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» for
    for (int i = 0; i <5; ++ i) {
        cout << числа [i] << "";
    }

    Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ 0;
}  

Π’Ρ‹Ρ…ΠΎΠ΄

  Π¦ΠΈΡ„Ρ€Ρ‹: 7 5 6 12 35
Π¦ΠΈΡ„Ρ€Ρ‹: 7 5 6 12 35  

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ использовали Ρ†ΠΈΠΊΠ» для , Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ ΠΎΡ‚ i = 0 Π΄ΠΎ i = 4 .На ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΌΡ‹ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠ»ΠΈ чисСл [i] .

ΠœΡ‹ снова использовали Ρ†ΠΈΠΊΠ» for, основанный Π½Π° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅, для Π²Ρ‹Π²ΠΎΠ΄Π° элСмСнтов массива. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ большС ΠΎΠ± этом Ρ†ΠΈΠΊΠ»Π΅, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ C ++ Ranged for Loop.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Π’ нашСм Ρ†ΠΈΠΊΠ»Π΅ Π½Π° основС Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΠΌΡ‹ использовали ΠΊΠΎΠ΄ const int & n вмСсто int n Π² качСствС объявлСния Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°. Однако Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ являСтся const int & n , ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ:

  1. ИспользованиС int n просто ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ элСмСнты массива Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ n Π²ΠΎ врСмя ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ.Π­Ρ‚ΠΎ нСэффСктивно с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния памяти.

    & n , ΠΎΠ΄Π½Π°ΠΊΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ адрСс памяти элСмСнтов массива для доступа ΠΊ ΠΈΡ… Π΄Π°Π½Π½Ρ‹ΠΌ, Π½Π΅ копируя ΠΈΡ… Π² Π½ΠΎΠ²ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ. Π­Ρ‚ΠΎ эффСктивно с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния памяти.

  2. ΠœΡ‹ просто ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅ΠΌ элСмСнты массива, Π° Π½Π΅ измСняСм ΠΈΡ…. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ const , Ρ‡Ρ‚ΠΎΠ±Ρ‹ случайно Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ значСния массива.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 2: ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ сохранСниС ΠΈΡ… Π² массивС

  #include 
ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ пространство ΠΈΠΌΠ΅Π½ std;

int main () {
    int числа [5];

    cout << "Π’Π²Π΅Π΄ΠΈΡ‚Π΅ 5 чисСл:" << endl;

    // сохраняСм Π²Π²ΠΎΠ΄ ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π² массив
    for (int i = 0; i <5; ++ i) {
        cin >> числа [i];
    }

    cout << "Π¦ΠΈΡ„Ρ€Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅:";

    // Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ элСмСнты массива
    for (int n = 0; n <5; ++ n) {
        cout << числа [n] << "";
    }

    Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ 0;
}  

Π’Ρ‹Ρ…ΠΎΠ΄

  Π’Π²Π΅Π΄ΠΈΡ‚Π΅ 5 Ρ†ΠΈΡ„Ρ€:
11
12
13
14
15
Π¦ΠΈΡ„Ρ€Ρ‹: 11 12 13 14 15  

И снова ΠΌΡ‹ использовали Ρ†ΠΈΠΊΠ» для , Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ ΠΎΡ‚ i = 0 Π΄ΠΎ i = 4 .На ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΌΡ‹ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π»ΠΈ Π²Π²ΠΎΠ΄ ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ сохраняли Π΅Π³ΠΎ Π² числах [i] .

Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ использовали Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ для Ρ†ΠΈΠΊΠ»Π° , Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ всС элСмСнты массива.


ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 3: ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ суммы ΠΈ срСднСго Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ элСмСнтов массива, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… для Ρ†ΠΈΠΊΠ»Π°

  #include 
ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ пространство ΠΈΠΌΠ΅Π½ std;

int main () {
    
    // ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ массив Π±Π΅Π· указания Ρ€Π°Π·ΠΌΠ΅Ρ€Π°
    Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅ числа [] = {7, 5, 6, 12, 35, 27};

    двойная сумма = 0;
    Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ счСт = 0;
    Π΄Π²ΠΎΠΉΠ½ΠΎΠ΅ срСднСС;

    cout << "Π¦ΠΈΡ„Ρ€Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅:";

    // Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ элСмСнты массива
    // использованиС Ρ†ΠΈΠΊΠ»Π° for Π½Π° основС Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°
    for (const double & n: числа) {
        cout << n << "";

        // вычисляСм сумму
        сумма + = n;

        // подсчитываСм количСствоэлСмСнтов массива
        ++ count;
    }

    // Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ сумму
    cout << "\ nTheir Sum =" << sum << endl;

    // Π½Π°Ρ…ΠΎΠ΄ΠΈΠΌ срСднСС
    срСднСС = сумма / количСство;
    cout << "Π˜Ρ… срСднСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ =" << срСднСС << endl;

    Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ 0;
}  

Π’Ρ‹Ρ…ΠΎΠ΄

  Π¦ΠΈΡ„Ρ€Ρ‹: 7 5 6 12 35 27
Π˜Ρ… сумма = 92
Π˜Ρ… срСднСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ = 15,3333  

Π’ этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅:

  1. ΠœΡ‹ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ массив double с ΠΈΠΌΠ΅Π½Π΅ΠΌ numbers , Π½ΠΎ Π±Π΅Π· указания Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°.ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ объявили Ρ‚Ρ€ΠΈ Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅: сумма , количСство ΠΈ срСднСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ .

    Π—Π΄Π΅ΡΡŒ сумма = 0 ΠΈ count = 0 .

  2. Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ использовали Ρ†ΠΈΠΊΠ» Π½Π° основС Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° для для ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ элСмСнтов массива. На ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π° ΠΌΡ‹ добавляСм Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ элСмСнт массива ΠΊ суммС .
  3. ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ count Π½Π° 1 Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива ΠΊ ΠΊΠΎΠ½Ρ†Ρƒ Ρ†ΠΈΠΊΠ»Π° for.
  4. ПослС ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ всСх элСмСнтов ΠΌΡ‹ ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅ΠΌ сумму ΠΈ срСднСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ всСх чисСл. Π‘Ρ€Π΅Π΄Π½Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ чисСл Ρ€Π°Π²Π½ΠΎ срСднСС = сумма / счСт;

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: ΠœΡ‹ использовали Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ для Ρ†ΠΈΠΊΠ»Π° вмСсто ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ для Ρ†ΠΈΠΊΠ»Π° .

ΠžΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» для Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΎΡ‚ нас ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ количСство ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ опрСдСляСтся Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ массива.

Но Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ для ΠΏΠ΅Ρ‚Π»ΠΈ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Ρ‚Π°ΠΊΠΈΡ… спСцификаций.


Массив C ++ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ Π³Ρ€Π°Π½ΠΈΡ†

Если ΠΌΡ‹ объявим массив Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 10, Ρ‚ΠΎ массив Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ элСмСнты с индСкса 0 Π΄ΠΎ 9.

Однако, Ссли ΠΌΡ‹ попытаСмся ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ элСмСнту с индСксом 10 ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ 10, это ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ повСдСнию.

.

ОбъявлСниС массива - cppreference.com

Массив - это Ρ‚ΠΈΠΏ, состоящий ΠΈΠ· Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ нСпустой ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² с
ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ элСмСнта . ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ этих ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (Ρ€Π°Π·ΠΌΠ΅Ρ€ массива) Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ измСняСтся Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ срока слуТбы массива.

[ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ] Бинтаксис

Π’ Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠ΅ объявлСния объявлСния массива ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ спСцификатора Ρ‚ΠΈΠΏΠ° ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Ρ‚ΠΈΠΏ элСмСнта (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°), Π° Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΎΡ€ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ„ΠΎΡ€ΠΌΡƒ:

[ статичСскиС (Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ) ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ (Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ) Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ (Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ) ] (1)
[ ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ (Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ) статичСскиС (Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ) Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ (Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ) ] (2)
[ ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ (Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ) * ] (3)

1,2) ΠžΠ±Ρ‰ΠΈΠΉ синтаксис Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΎΡ€Π° массива

3) Π”Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΎΡ€ для VLA Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° (ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡΠ²Π»ΡΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² области видимости ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ)
Π³Π΄Π΅

Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ - любоС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΊΡ€ΠΎΠΌΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° запятой, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ количСство элСмСнтов Π² массивС
ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ - любая комбинация ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² const, restrict ΠΈΠ»ΠΈ volatile, Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π½Π°Ρ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² списках ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ; это опрСдСляСт Ρ‚ΠΈΠΏ указатСля, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСобразуСтся этот ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ массива
 float fa [11], * afp [17]; // fa - это массив ΠΈΠ· 11 чисСл с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой
                        // afp - это массив ΠΈΠ· 17 ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° числа с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой 

[ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ] ОбъяснСниС

БущСствуСт нСсколько Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² Ρ‚ΠΈΠΏΠΎΠ² массивов: массивы извСстного постоянного Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, массивы ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ ΠΈ массивы нСизвСстного Ρ€Π°Π·ΠΌΠ΅Ρ€Π°.

[ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ] ΠœΠ°ΡΡΠΈΠ²Ρ‹ постоянного извСстного Ρ€Π°Π·ΠΌΠ΅Ρ€Π°

Если Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΎΡ€Π΅ массива являСтся цСлочислСнным константным Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ большС нуля, Π° Ρ‚ΠΈΠΏ элСмСнта - это Ρ‚ΠΈΠΏ с извСстным постоянным Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ элСмСнты Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ VLA) (начиная с C99), Ρ‚ΠΎ Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΎΡ€ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ массив постоянного извСстного Ρ€Π°Π·ΠΌΠ΅Ρ€Π°:

 int n [10]; // цСлочислСнныС константы - это постоянныС выраТСния
char o [sizeof (Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ)]; // sizeof - постоянноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅
пСрСчислСниС {MAX_SZ = 100};
int n [MAX_SZ]; // константы пСрСчислСния ΡΠ²Π»ΡΡŽΡ‚ΡΡ постоянными выраТСниями 

ΠœΠ°ΡΡΠΈΠ²Ρ‹ постоянного извСстного Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρ‹ массива для прСдоставлСния своих Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ:

 int a [5] = {1,2,3}; // ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ int [5] ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ Π΄ΠΎ 1,2,3,0,0
char str [] = "abc"; // ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ char [4] ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΊΠ°ΠΊ 'a', 'b', 'c', '\ 0' 

Π’ списках ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΎΡ€Π°Ρ… массива Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Ρ‹ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ элСмСнты синтаксиса: ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово static ΠΈ ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΡΠ²Π»ΡΡ‚ΡŒΡΡ Π² любом порядкС ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° (ΠΎΠ½ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΡΠ²Π»ΡΡ‚ΡŒΡΡ, Π΄Π°ΠΆΠ΅ Ссли Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΎΠΏΡƒΡ‰Π΅Π½ΠΎ).

Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ‚ΠΈΠΏΠ° массива ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово static ΠΌΠ΅ΠΆΠ΄Ρƒ [ ΠΈ ] , Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ фактичСского ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт массива, содСрТащий ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ элСмСнтов, сколько ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ:

 void fadd (double a [static 10], const double b [static 10])
{
    for (int i = 0; i <10; i ++) {
        Ссли (a [i] <0,0) Π²ΠΎΠ·Π²Ρ€Π°Ρ‚;
        а [я] + = Ь [я];
    }
}
// Π²Ρ‹Π·ΠΎΠ² fadd ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Π³Ρ€Π°Π½ΠΈΡ† Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ компиляции
// Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ, Ρ‚Π°ΠΊΡƒΡŽ ​​как ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Π²Ρ‹Π±ΠΎΡ€ΠΊΠ° 10 Π΄Π²ΠΎΠΉΠ½ΠΈΠΊΠΎΠ²
int main (пусто)
{
    Π΄Π²Π°ΠΆΠ΄Ρ‹ a [10] = {0}, b [20] = {0};
    ΠΏΡ€ΠΈΡ‡ΡƒΠ΄Π° (Π°, Π±); // Π’ ΠŸΠžΠ Π―Π”ΠšΠ•
    Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ x [5] = {0};
    fadd (x, b); // Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅: Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ массива слишком ΠΌΠ°Π»
} 

Если ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚, ΠΎΠ½ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ Ρ‚ΠΈΠΏ указатСля, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСобразуСтся Ρ‚ΠΈΠΏ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° массива:

 int f (const int a [20])
{
 // Π² этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ a ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ const int * (ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° const int)
}
int g (const int a [const 20])
{
 // Π² этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ a ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ const int * const (ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ const Π½Π° const int)
} 

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ с ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ Ρ‚ΠΈΠΏΠ° restrict:

 void fadd (double a [static restrict 10],
          const double b [статичСскоС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ 10])
{
    for (int i = 0; i <10; i ++) {// Ρ†ΠΈΠΊΠ» ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΈ ΠΏΠ΅Ρ€Π΅ΡƒΠΏΠΎΡ€ΡΠ΄ΠΎΡ‡ΠΈΡ‚ΡŒ
        Ссли (Π° [я] <0.0) ΠΏΠ΅Ρ€Π΅Ρ€Ρ‹Π²;
        а [я] + = Ь [я];
    }
} 
ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹

Если Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ являСтся цСлочислСнным константным Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ, Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΎΡ€ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для массива ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°.

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΡ‚ΠΎΠΊ управлСния ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Ρ‡Π΅Ρ€Π΅Π· объявлСниС, Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ вычисляСтся (ΠΈ ΠΎΠ½ΠΎ всСгда Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΡ†Π΅Π½ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ большС нуля), ΠΈ выдСляСтся массив (соотвСтствСнно, врСмя ΠΆΠΈΠ·Π½ΠΈ VLA заканчиваСтся, ΠΊΠΎΠ³Π΄Π° объявлСниС Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ области видимости). ). Π Π°Π·ΠΌΠ΅Ρ€ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ экзСмпляра VLA Π½Π΅ измСняСтся Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π΅Π³ΠΎ срока слуТбы, Π½ΠΎ ΠΏΡ€ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π΅ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ ΠΊΠΎΠ΄Π° ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π΄Π΅Π»Π΅Π½ с Π΄Ρ€ΡƒΠ³ΠΈΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ.

 {
   int n = 1;
этикСтка:
   int a [n]; // пСрСраспрСдСлСниС 10 Ρ€Π°Π·, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ с Π΄Ρ€ΡƒΠ³ΠΈΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ
   printf ("Π’ массивС% элСмСнтов zu \ n", sizeof a / sizeof * a);
   if (n ++ <10) ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ ΠΌΠ΅Ρ‚ΠΊΠ΅; // Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· области видимости VLA Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ своС врСмя ΠΆΠΈΠ·Π½ΠΈ
} 

Если Ρ€Π°Π·ΠΌΠ΅Ρ€ составляСт * , дСкларация ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для VLA Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°. Π’Π°ΠΊΠΎΠ΅ объявлСниС ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡΠ²Π»ΡΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² области видимости ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ массив ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. ЀактичСски, всС Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ VLA Π² области ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π±Ρ‹Π»ΠΎ Π·Π°ΠΌΠ΅Π½Π΅Π½ΠΎ Π½Π° * .

 void foo (size_t x, int a [*]);
void foo (size_t x, int a [x])
{
    printf ("% zu \ n", Ρ€Π°Π·ΠΌΠ΅Ρ€ a); // Ρ‚ΠΎ ΠΆΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ sizeof (int *)
} 

ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Π΅ ΠΎΡ‚ Π½ΠΈΡ… Ρ‚ΠΈΠΏΡ‹ (ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° Π½ΠΈΡ… ΠΈ Ρ‚. Π”.) ΠžΠ±Ρ‹Ρ‡Π½ΠΎ извСстны ΠΊΠ°ΠΊ «измСняСмыС Ρ‚ΠΈΠΏΡ‹Β» (VM). ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ любого измСняСмого Ρ‚ΠΈΠΏΠ° ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² области видимости Π±Π»ΠΎΠΊΠ° ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

 extern int n;
int A [n]; // Ошибка: ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Ρ„Π°ΠΉΠ»Π° VLA
внСшний int (* p2) [n]; // Ошибка: ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Ρ„Π°ΠΉΠ»Π° VM
int B [100]; // ОК: массив Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ области постоянного извСстного Ρ€Π°Π·ΠΌΠ΅Ρ€Π°
void fvla (int m, int C [m] [m]); // ОК: ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ VLA 

VLA Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ хранСния.Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° VLA, Π½ΠΎ Π½Π΅ сами VLA, Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ хранСния. Никакой Ρ‚ΠΈΠΏ Π’Πœ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ связи.

 void fvla (int m, int C [m] [m]) // ОК: ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ области видимости Π±Π»ΠΎΠΊΠ° / автоматичСской ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π½Π° VLA
{
    typedef int VLA [ΠΌ] [ΠΌ]; // ОК: Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅ΠΌ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости VLA
    int D [ΠΌ]; // OK: ΠΎΠ±Π»Π°ΡΡ‚ΡŒ дСйствия Π±Π»ΠΎΠΊΠ° / автоматичСская Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ VLA
// статичСский int E [m]; // Ошибка: статичСская Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ VLA
// внСшний int F [m]; // Ошибка: VLA с привязкой
    int (* s) [ΠΌ]; // ОК: ΠΎΠ±Π»Π°ΡΡ‚ΡŒ дСйствия Π±Π»ΠΎΠΊΠ° / автоматичСская Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π’Πœ
// внСшний int (* r) [m]; // Ошибка: Π’Πœ с привязкой
    статичСский int (* q) [ΠΌ] = & B; // ОК: ΠΎΠ±Π»Π°ΡΡ‚ΡŒ дСйствия Π±Π»ΠΎΠΊΠ° / статичСская Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π’Πœ}
} 

Π’Π°Ρ€ΠΈΠ°Ρ‚ΠΈΠ²Π½ΠΎ измСняСмыС Ρ‚ΠΈΠΏΡ‹ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‡Π»Π΅Π½Π°ΠΌΠΈ структур ΠΈΠ»ΠΈ объСдинСний.

 struct tag {
    int z [n]; // Ошибка: Ρ‡Π»Π΅Π½ структуры VLA
    int (* y) [n]; // Ошибка: Ρ‡Π»Π΅Π½ структуры Π’Πœ
}; 
(начиная с C99)

Если компилятор опрСдСляСт макроконстанту __STDC_NO_VLA__ ΠΊΠ°ΠΊ Ρ†Π΅Π»ΠΎΡ‡ΠΈΡΠ»Π΅Π½Π½ΡƒΡŽ константу 1, Ρ‚ΠΎ Ρ‚ΠΈΠΏΡ‹ VLA ΠΈ VM Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ.

(начиная с C11)
[ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ] ΠœΠ°ΡΡΠΈΠ²Ρ‹ нСизвСстного Ρ€Π°Π·ΠΌΠ΅Ρ€Π°

Если Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΎΡ€Π΅ массива ΠΎΠΏΡƒΡ‰Π΅Π½ΠΎ, ΠΎΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ массив нСизвСстного Ρ€Π°Π·ΠΌΠ΅Ρ€Π°.Π—Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ списков ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ (Π³Π΄Π΅ Ρ‚Π°ΠΊΠΈΠ΅ массивы ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ΡΡ Π² ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ) ΠΈ ΠΊΠΎΠ³Π΄Π° доступСн ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€, Ρ‚Π°ΠΊΠΎΠΉ Ρ‚ΠΈΠΏ являСтся Π½Π΅ΠΏΠΎΠ»Π½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ (ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ VLA Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹ΠΉ с Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ * , являСтся ΠΏΠΎΠ»Π½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ ) (начиная с C99):

 extern int x []; // Ρ‚ΠΈΠΏ x - "массив нСизвСстной Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ int"
int a [] = {1,2,3}; // Ρ‚ΠΈΠΏ a - "массив ΠΈΠ· 3 int" 

Π’ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ структуры массив нСизвСстного Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ послСдний Ρ‡Π»Π΅Π½ (Ссли Π΅ΡΡ‚ΡŒ хотя Π±Ρ‹ ΠΎΠ΄ΠΈΠ½ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ‡Π»Π΅Π½), ΠΈ Π² этом случаС это особый случай, извСстный ΠΊΠ°ΠΊ Π³ΠΈΠ±ΠΊΠΈΠΉ элСмСнт массива .ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΡΡ‚ΠΈ смотритС Π² структурС:

 struct s {int n; Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ d []; }; // s.d - Π³ΠΈΠ±ΠΊΠΈΠΉ элСмСнт массива
struct s * s1 = malloc (sizeof (struct s) + (sizeof (double) * 8)); // ΠΊΠ°ΠΊ Ссли Π±Ρ‹ d Π±Ρ‹Π»ΠΎ Π΄Π²ΠΎΠΉΠ½Ρ‹ΠΌ d [8] 
(начиная с C99)

[ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ] ΠšΠ²Π°Π»ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹

Если Ρ‚ΠΈΠΏ массива объявлСн с ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ const, volatile, restrict (начиная с C99) ΠΈΠ»ΠΈ _Atomic (начиная с C11) (Ρ‡Ρ‚ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ с использованиСм typedef), Ρ‚ΠΈΠΏ массива Π½Π΅ квалифицируСтся, Π½ΠΎ Π΅Π³ΠΎ Ρ‚ΠΈΠΏ элСмСнта:

 typedef int A [2] [3];
const A a = {{4, 5, 6}, {7, 8, 9}}; // массив массива const int
int * pi = a [0]; // Ошибка: a [0] ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ const int * 
[ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ] НазначСниС

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ‚ΠΈΠΏΠ° массива Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ измСняСмыми lvalue, ΠΈ хотя ΠΈΡ… адрСс ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ взят, ΠΎΠ½ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ слСва ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° присваивания.Однако структуры с Ρ‡Π»Π΅Π½Π°ΠΌΠΈ массива ΡΠ²Π»ΡΡŽΡ‚ΡΡ измСняСмыми lvalue ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ присвоСны:

 int a [3] = {1,2,3}, b [3] = {4,5,6};
int (* p) [3] = & a; // Ρ…ΠΎΡ€ΠΎΡˆΠΎ, адрСс ΠΌΠΎΠΆΠ½ΠΎ Π²Π·ΡΡ‚ΡŒ
// a = b; // ошибка, a - массив
структура {int c [3]; } s1, s2 = {3,4,5};
s1 = s2; // Ρ…ΠΎΡ€ΠΎΡˆΠΎ: ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π½Π°Ρ‡Π°Ρ‚ΡŒ структуры, содСрТащиС элСмСнты массива 
[ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ] ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ массива Π² ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ

Π›ΡŽΠ±ΠΎΠ΅ lvalue-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° массива ΠΏΡ€ΠΈ использовании Π² любом контСкстС, ΠΊΡ€ΠΎΠΌΠ΅

подвСргаСтся нСявному ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΡŽ Π² ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° свой ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт.Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π½Π΅ являСтся lvalue.

Если массив Π±Ρ‹Π» объявлСн рСгистром, ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, которая пытаСтся Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅, Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ.

 int a [3] = {1,2,3};
int * p = a;
printf ("% zu \ n", Ρ€Π°Π·ΠΌΠ΅Ρ€ a); // Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива
printf ("% zu \ n", Ρ€Π°Π·ΠΌΠ΅Ρ€ p); // Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ указатСля 

Когда Ρ‚ΠΈΠΏ массива ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² спискС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΠ½ прСобразуСтся Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Ρ‚ΠΈΠΏ указатСля: int f (int a [2]) ΠΈ int f (int * a) ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ фактичСский Ρ‚ΠΈΠΏ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ являСтся Ρ‚ΠΈΠΏΠΎΠΌ указатСля, Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ массива выполняСт ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ массива Π² ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ; Ρ€Π°Π·ΠΌΠ΅Ρ€ массива Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² нСдоступСн для Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ явно:

 void f (int a [], int sz) // фактичСски ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ void f (int * a, int sz)
{
    для (int i = 0; i 
[ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ] ΠœΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы

Когда Ρ‚ΠΈΠΏ элСмСнта массива - Π΄Ρ€ΡƒΠ³ΠΎΠΉ массив, говорят, Ρ‡Ρ‚ΠΎ массив являСтся ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΌ:

 // массив из 2 массивов по 3 int в каТдом
int a [2] [3] = {{1,2,3}, // ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ 2x3
               {4,5,6}}; // с ΠΌΠ°ΠΊΠ΅Ρ‚ΠΎΠΌ строк 

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° примСняСтся ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ массива Π² ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ, ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив прСобразуСтся Π² ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт, e.g., ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΏΠ΅Ρ€Π²ΡƒΡŽ строку:

 int a [2] [3]; // ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° 2x3
int (* p1) [3] = a; // ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΏΠ΅Ρ€Π²ΡƒΡŽ строку ΠΈΠ· 3 элСмСнтов
int b [3] [3] [3]; // ΠΊΡƒΠ± 3x3x3
int (* p2) [3] [3] = b; // ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΡŒ 3x3 

ΠœΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΈ:

 int n = 10;
int a [n] [2 * n]; 
(начиная с C99)

[ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ] ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡ

ОбъявлСния массивов Π½ΡƒΠ»Π΅Π²ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ Π½Π΅ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ, Π΄Π°ΠΆΠ΅ Ссли Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ компиляторы ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ ΠΈΡ… Π² качСствС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΉ (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π² Π²ΠΈΠ΄Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π³ΠΈΠ±ΠΊΠΈΡ… элСмСнтов массива Π΄ΠΎ C99).

Если Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° VLA ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Π΅ эффСкты, ΠΎΠ½ΠΈ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ Π±ΡƒΠ΄ΡƒΡ‚ созданы, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ случаСв, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΎ являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ выраТСния sizeof, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π΅ зависит ΠΎΡ‚ Π½Π΅Π³ΠΎ:

 int n = 5;
size_t sz = sizeof (int (*) [n ++]); // ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ»ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ n 

[ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ] Бсылки

  • Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ C11 (ISO / IEC 9899: 2011):
  • 6.7.6.2 Π”Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ массивов (стр: 130-132)
  • Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ C99 (ISO / IEC 9899: 1999):
  • 6.7.5.2 Π”Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ массивов (стр. 116-118)
  • Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ C89 / C90 (ISO / IEC 9899: 1990):
  • 3.5.4.2 Π”Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ массивов

[ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ] Π‘ΠΌ. Π’Π°ΠΊΠΆΠ΅

.

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *