Как Π·Π°Π΄Π°Ρ‚ΡŒ массив Π² c: БтатичСский массив: объявлСниС, Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, использованиС

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

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ массива | ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° C ΠΈ C++

Π‘ позволяСт ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΈ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ массивы Π½Π° этапС объявлСния. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹ΠΉ Π²ΠΈΠ΄ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ массива Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π΅Π½ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:

спСцификатор Ρ‚ΠΈΠΏΠ° имя_массива [Ρ€Π°Π·ΠΌΠ΅Ρ€N] … [Ρ€Π°Π·ΠΌΠ΅Ρ€1] = {список Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ};

Бписок Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ — это Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ запятыми список констант, совмСстимых ΠΏΠΎ Ρ‚ΠΈΠΏΡƒ со спСцификатором Ρ‚ΠΈΠΏΠ°. ΠŸΠ΅Ρ€Π²Π°Ρ константа помСщаСтся Π² ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт массива, вторая — Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Π—Π° послСднСй константой списка Π½Π΅Ρ‚ запятой. ΠžΠ±Ρ€Π°Ρ‚ΠΈΠΌ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Ρ‚ΠΎΡ‡ΠΊΠ° с запятой слСдуСт Π·Π° }. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ 10-элСмСнтный цСлочислСнный массив инициализируСтся числами ΠΎΡ‚ 1 Π΄ΠΎ 10:

int i [10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ i[0] ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 1, i[9] — 10.

ΠœΠ°ΡΡΠΈΠ²Ρ‹ символов, содСрТащиС строки, Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ ΡƒΠ΄ΠΎΠ±Π½ΡƒΡŽ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π² Π²ΠΈΠ΄Π΅

char имя_массива [Ρ€Π°Π·ΠΌΠ΅Ρ€] = «ΡΡ‚Ρ€ΠΎΠΊΠ°»;

ΠŸΡ€ΠΈ Π΄Π°Π½Π½ΠΎΠΉ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½ΡƒΠ»Π΅Π²ΠΎΠΉ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ‚ΠΎΡ€ автоматичСски добавляСтся ΠΊ ΠΊΠΎΠ½Ρ†Ρƒ строки. НиТСпривСдСнный Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ΄Π° ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ строку str Ρ„Ρ€Π°Π·ΠΎΠΉ Β«helloΒ»:

char str[6] = «hello»;

Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ:

char str [ 6 ] = {‘h’, ‘Π΅’, ‘l’, ‘l’, ‘o’, ‘\0’};

ΠžΠ±Ρ€Π°Ρ‚ΠΈΠΌ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π² Π΄Π°Π½Π½ΠΎΠΉ вСрсии слСдуСт явным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π½ΡƒΠ»Π΅Π²ΠΎΠΉ символ. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ всС строки Π² Π‘ ΠΎΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ символом, слСдуСт ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ массив достаточно Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ для Π΅Π³ΠΎ вмСщСния. ИмСнно поэтому str состоит ΠΈΠ· 6 символов, хотя Β«helloΒ» ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 5 символов.

ΠœΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ sqrs числами ΠΎΡ‚ 1 Π΄ΠΎ 10 ΠΈ ΠΈΡ… ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π°ΠΌΠΈ:

int sqrs[10] [2] =
{
1, 1
2, 4,
3, 9,
4, 16,
5, 25,
6, 36,
7, 49,
8, 64,
9, 81,
10, 100
};

Π—Π΄Π΅ΡΡŒ sqrs[0][0] содСрТит 1, sqrs[0][1] содСрТит 1, sqrs[1][0] содСрТит 2, sqrs[1][1] содСрТит 4 ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

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

int sqrs[10][2] =
{
{1, 1},
{2, 4},
{3, 9},
{4, 16},
{5, 25},
{6, 36},
{7, 49},
{8, 64},
{9, 81},
{10, 100}
};

ΠŸΡ€ΠΈ использовании субагрСгатной Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ Π² случаС нСуказания Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠ³ΠΎ количСства ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² для Π΄Π°Π½Π½ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΡ‹ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Ρ‡Π»Π΅Π½Ρ‹ установятся Π² 0 автоматичСски.

ДинамичСский ΠΈΠ»ΠΈ статичСский?

Π’Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎ Π² языкС Паскаль ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ статичСскиС массивы Π²ΠΈΠ΄Π°

var a: array [1..10] of integer;

Π“Ρ€Π°Π½ΠΈΡ†Ρ‹ массива ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π°Π΄Π°ΡŽΡ‚ΡΡ константами, ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива Π² Ρ…ΠΎΠ΄Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ нСльзя. Π—Π°Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ индСкс Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ†Π΅Π»ΠΎΠ³ΠΎ, Π½ΠΎ ΠΈ, скаТСм, символьного ΠΈΠ»ΠΈ пСрСчислимого Ρ‚ΠΈΠΏΠ°. НапримСр, для подсчСта встрСчаСмости ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π±ΡƒΠΊΠ²Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ массив

var LettersCount: array ['a'..'z'] of integer;

ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π½ΠΈΠΌ Π² своС ΡƒΠ΄ΠΎΠ²ΠΎΠ»ΡŒΡΡ‚Π²ΠΈΠ΅:

LettersCount['z'] := 1;
LettersCount['d'] := LettersCount['d'] + 1;

НСдостатки Ρ‚Π°ΠΊΠΈΡ… массивов извСстны: Ссли Π·Π°Ρ€Π°Π½Π΅Π΅ нСизвСстно, сколько элСмСнтов потрСбуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‚ΠΎ ΠΏΠΎΠ΄ массив отводится ΠΏΠ°ΠΌΡΡ‚ΡŒ максимального Ρ€Π°Π·ΠΌΠ΅Ρ€Π°. Π’ ΠΈΡ‚ΠΎΠ³Π΅ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв ΠΌΡ‹ «Π·Π°ΠΏΠ°ΡΠ°Π΅ΠΌΡΡ Π²ΠΏΡ€ΠΎΠΊ», Π° ΠΈΠ½ΠΎΠ³Π΄Π° ΠΈ этого «Π·Π°ΠΏΠ°ΡΠ°» оказываСтся нСдостаточно. ИмСнно поэтому Ρ‚Π°ΠΊΠΈΠ΅ массивы Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ статичСскими: ΠΈΡ… Ρ€Π°Π·ΠΌΠ΅Ρ€ статичСн ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π΄Π°Π½ Π½Π° этапС компиляции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π’ Delphi Object Pascal появились динамичСскиС массивы, Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ, Π½ΠΎ ΠΈ ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΏΠΎ Ρ…ΠΎΠ΄Ρƒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ИмСнно ΠΎΠ± этих массивах ΠΈ ΠΎ прСимущСствах ΠΈΡ… использования ΠΏΠΎΠΉΠ΄Π΅Ρ‚ Ρ€Π΅Ρ‡ΡŒ Π΄Π°Π»Π΅Π΅.

ΠžΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ ΠΎΠ½ΠΈ ΠΏΡ€Π΅Π΄Π΅Π»ΡŒΠ½ΠΎ просто:

Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π΄Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ‚Π°ΠΊΠΎΠ³ΠΎ массива, слСдуСт Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ SetLength:

var n: integer;
read(n);
SetLength(a,n);

Как ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ‚Π°ΠΊΠΎΠ³ΠΎ массива ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π΄Π°Π½ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, которая вычисляСтся ΠΏΠΎ Ρ…ΠΎΠ΄Ρƒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΡ‹ (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ вводится).

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ динамичСского массива, слСдуСт Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Length: Length(a) Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ динамичСского массива.

Π˜Π½Π΄Π΅ΠΊΡΡ‹ динамичСского массива — Ρ‚ΠΎΠ»ΡŒΠΊΠΎ цСлочислСнныС. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ниТняя Π³Ρ€Π°Π½ΠΈΡ†Π° индСкса всСгда Ρ€Π°Π²Π½Π° Π½ΡƒΠ»ΡŽ. Π’ΠΎ Π΅ΡΡ‚ΡŒ послС Π²Ρ‹Π·ΠΎΠ²Π° SetLength(a,n) элСмСнтами массива a ΡΠ²Π»ΡΡŽΡ‚ΡΡ a[0]..a[n-1]. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ вывСсти элСмСнты динамичСского массива:

for i:=0 to Length(a)-1 do
  write(a[i],' ');

Π§Π΅ΠΌ Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Π° ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° SetLength — Ρ‚Π°ΠΊ это Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ, ΠΈ ΠΏΡ€ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π²Ρ‹Π·ΠΎΠ²Π°Ρ… староС содСрТимоС массива сохраняСтся:

SetLength(a,3);
a[0] := 666;
SetLength(a,5);
writeln(a[0]); // вывСдСтся 666 

ДинамичСскиС массивы ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² памяти ссылками. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ любая пСрСмСнная Ρ‚ΠΈΠΏΠ° «Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΠΈΠΉ массив» являСтся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π° Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½Ρ‹ΠΉ участок динамичСской памяти. ΠŸΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ этот ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Ρ…Ρ€Π°Π½ΠΈΡ‚ nil, Π° Π²Ρ‹Π·ΠΎΠ² SetLength(a) выдСляСт ΠΏΠΎΠ΄ Π΄Π°Π½Π½Ρ‹Π΅ массива Π±Π»ΠΎΠΊ динамичСской памяти ΠΈ записываСт Π² a адрСс этого Π±Π»ΠΎΠΊΠ° памяти.

Π’ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ — динамичСскиС массивы — это всСго лишь адрСса, ΠΈΠΌΠ΅Π΅Ρ‚ нСсколько слСдствий.

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΏΡ€ΠΈ присваивании статичСских массивов копируСтся содСрТимоС, Π° ΠΏΡ€ΠΈ присваивании динамичСских — Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ:

var a1,a2: array [1..10] of integer;
var b1,b2: array of integer;
a1 := a2; // копируСтся содСрТимоС
b1 := b2; // копируСтся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ

Π’ΠΎ Π΅ΡΡ‚ΡŒ, присваиваниС Π±ΠΎΠ»ΡŒΡˆΠΈΡ… статичСских массивов происходит Π΄ΠΎΠ»Π³ΠΎ, Π° присваиваниС динамичСских — быстро нСзависимо ΠΎΡ‚ ΠΈΡ… Ρ€Π°Π·ΠΌΠ΅Ρ€Π°.

Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, ΠΏΡ€ΠΈ присваивании динамичСских массивов ΠΎΠ±Π΅ ΠΏΡ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ b1 ΠΈ b2 ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½Π° ΠΎΠ΄ΠΈΠ½ участок динамичСской памяти, поэтому ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ элСмСнта Π² массивС b1 ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΈ ΠΊ измСнСнию массива b2:

b1[0] := 5;
writeln(b2[0]); // вывСдСтся 5 

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ копию Π΄Π°Π½Π½Ρ‹Ρ… динамичСского массива, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Copy:

b2[0] := 3;
b1 := Copy(b2);
b1[0] := 5;
writeln(b2[0]); // вывСдСтся 3 

ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° динамичСских массивов Π² ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Ρ‚ΠΎΠΆΠ΅ проста:

type IntArr = array of integer;
Β 
procedure print(a: IntArr);
var i: integer;
begin
  for i:=0 to Length(a)-1 do
    write(a[i],' ');
end;
Β 
var b: IntArr;
...
print(b);

ΠŸΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ динамичСскиС массивы ΠΏΠΎ ссылкС Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ массива Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ смысла — Π² ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ пСрСдаСтся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ. ДинамичСский массив ΠΈΠΌΠ΅Π΅Ρ‚ смысл ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ var-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΎΠ΄Π½ΠΎΠΌ случаС: Ссли ΠΌΡ‹ ΠΎΡ‚Π²ΠΎΠ΄ΠΈΠΌ Π² ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ для Π½Π΅Π³ΠΎ ΠΏΠ°ΠΌΡΡ‚ΡŒ:

procedure CreateAndFill(var a: IntArr; n: integer; fill: integer);
var i: integer;
begin
  SetLength(a,n);
  for i:=0 to n-1 do
    a[i] := fill;
end.

И, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, Π² использовании динамичСских массивов Π² ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… скрыта ΠΎΠ΄Π½Π° западня: Ссли ΠΌΡ‹ мСняСм элСмСнт массива Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ‚ΠΎ мСняСтся ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ массив — фактичСский ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€:

procedure Trap(a: IntArr);
begin
  a[0] := 666;
end;
Β 
var b: IntArr;
...
b[0] := 777;
Trap(b);
writeln(b[0]); // вывСдСтся 666 

Π•Ρ‰Π΅ Π² Delphi ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ массивы. К соТалСнию, ΠΎΠ½ΠΈ ΠΏΠΎ Π²Π½Π΅ΡˆΠ½Π΅ΠΌΡƒ Π²ΠΈΠ΄Ρƒ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠΈ Π½Π° динамичСскиС:

procedure print1(a: array of integer);
var i: integer;
begin
  for i:=0 to High(a)-1 do
    write(a[i],' ');
end;

Бмысл Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Π½Π° мСсто ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ массива ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ статичСский массив любого Ρ€Π°Π·ΠΌΠ΅Ρ€Π°. Но запись array of integer ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΌ смыслС! ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΡ‚ΠΊΠ°Π·Π°Π»ΠΈΡΡŒ ΠΎΡ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… массивов Π² PascalABC.NET. ΠŸΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ динамичСскими массивами!

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ, Ρ‡Ρ‚ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ появилось Π² динамичСских массивах Π² PascalABC.NET.

1. ДинамичСскиС массивы ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ описании:

var a: array of integer := (1,3,5);

2. Π’Ρ‹Π΄Π΅Π»ΡΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΏΠΎΠ΄ динамичСскС массивовы ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ new:

a := new integer[5];

Π’Π°ΠΊΠΎΠΉ способ Ρ…ΠΎΡ€ΠΎΡˆ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠΈΠ²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ динамичСский массив Π² .NET являСтся классом. ΠŸΠ»ΠΎΡ… ΠΆΠ΅ ΠΎΠ½ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΌ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠΈ памяти Ρ‚Π°ΠΊΠΈΠΌ способом староС содСрТимоС тСряСтся.

3. Как ΠΌΡ‹ упомянули, динамичСский массив Π² PascalABC.NET являСтся классом, Π° Π·Π½Π°Ρ‡ΠΈΡ‚, ΠΎΠ½ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ свойства:

a.Length — свойство, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π΅Π΅ Π΄Π»ΠΈΠ½Ρƒ массива
System.Array.Sort(a) — статичСский ΠΌΠ΅Ρ‚ΠΎΠ΄, ΡΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ массив a ΠΏΠΎ Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°Π½ΠΈΡŽ
System.Array.Reverse(a) — статичСский ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΈΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Π΄Π°Π½Π½Ρ‹Π΅ Π² массивС a

ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅.

4. Для динамичСских массивов Π² PascalABC.NET ΠΈΠΌΠ΅Π΅Ρ‚ мСсто структурная ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ Ρ‚ΠΈΠΏΠΎΠ² (Π² Delphi — имСнная). ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ Π² PascalABC.NET Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Π° Π² Delphi Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ компиляции:

var
b1: array of integer;
b2: array of integer;
...
b1 := b2;

5. Π’Π²ΠΈΠ΄Ρƒ структурной эквивалСнтности Ρ‚ΠΈΠΏΠΎΠ² для динамичСских массивов ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π² ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

procedure print(a: array of integer);
begin
  for var i:=0 to a.Length-1 do
    write(a[i],' ');
end;

Напомним, Ρ‡Ρ‚ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ массивы Π² PascalABC.NET ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚!

6. Для динамичСских массивов (Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ статичСских) ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ» foreach (ΠΏΡ€ΠΈ условии, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ осущСствляСм доступ ΠΊ элСмСнтам Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅):

foreach x: integer in a do
  write(x,' ');

И, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, скаТСм нСсколько слов ΠΏΡ€ΠΎ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹Π΅ динамичСскиС массивы. Они ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ массивы массивов.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ созданиС Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ динамичСского массива Ρ€Π°Π·ΠΌΠ΅Ρ€Π° m Π½Π° n:

var
  с: array of array of integer;
  m,n: integer;
...
read(m,n);
SetLength(с,m);
for var i:=0 to m-1 do
  SetLength(c[i],n);

ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ, Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΈ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ Π½Π° ΠŸΠΈΡ‚ΠΎΠ½Π΅

Python β€” популярный ΠΈ динамичСский язык программирования. Он позволяСт Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΏΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ПО, ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ массивы. Π‘ ΠΈΡ… ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Ρ‹ смоТСтС Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΡ‚ΠΈΠΏΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ дублирования ΠΊΠΎΠ΄Π°.

ΠžΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы Π² Python ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой список элСмСнтов. ЗначСния ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобок, Π³Π΄Π΅ ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· Π·Π°ΠΏΡΡ‚ΡƒΡŽ. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, любой элСмСнт ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΏΠΎ индСксу ΠΈ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π΅ΠΌΡƒ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

ΠŸΡƒΡΡ‚ΠΎΠΉ список:

Массив строк Π² Python:

Prime = ['string1', 'string2', 'string3'] 
Prime[1] = 'string2'; //true 

Π§Ρ‚ΠΎΠ±Ρ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ число элСмСнтов Π²Π½ΡƒΡ‚Ρ€ΠΈ списка, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ len():

Когда Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ элСмСнты массива, ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ Ρ†ΠΈΠΊΠ» for. Π’ Β«ΠŸΠΈΡ‚ΠΎΠ½Π΅Β» этот Ρ†ΠΈΠΊΠ» ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅Ρ‚ элСмСнты, Π° Π½Π΅ индСксы, ΠΊΠ°ΠΊ Π² Pascal:

Π˜Π΄Ρ‘ΠΌ дальшС. Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ†ΠΈΠΊΠ» Π² Python ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° заполнСния списков. ЗаписываСтся ΠΎΠ½ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Π²ΠΈΠ΄Π΅:
[Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ массива for имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ in число элСмСнтов];

Если Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎ созданиС Π½Π΅ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ, Π° Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива, Ρ‚ΠΎ ΠΎΠ½ Π² Python создаётся ΠΏΡƒΡ‚Ρ‘ΠΌ использования Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², ΠΈ выглядит это Ρ‚Π°ΠΊ:

[[0 for j in range(m)] for i in range(n)]

Как ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π² Python?

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈ модификация массивов ΠΈΠ»ΠΈ ΠΌΠ°Ρ‚Ρ€ΠΈΡ† (matrix) Π² Python осущСствляСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ NumPy. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ, ΠΈ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ, ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ ΡˆΠΈΡ€ΠΎΠΊΠΈΠΌ Π½Π°Π±ΠΎΡ€ΠΎΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ матСматичСскиС Π·Π°Π΄Π°Ρ‡ΠΈ. Она Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ созданиС Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹Ρ… ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов, Π½ΠΎ обСспСчиваСт Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΎΠ΄Π½ΠΎΡ€ΠΎΠ΄Π½Ρ‹Ρ… ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ… ΠΌΠ°Ρ‚Ρ€ΠΈΡ†.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΈ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π°, Π΅Π³ΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚:

Ѐункция array() β€” ΠΎΠ΄ΠΈΠ½ ΠΈΠ· самых простых способов, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΡ… динамичСски Π·Π°Π΄Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ- ΠΈ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив Π² Python. Она создаёт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° ndarray:

array = np.array(/* мноТСство элСмСнтов */)

Для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ функция array.type() β€” ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° имя массива, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» создан.

Если Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° массива, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π½Π° стадии создания dtype=np.complex:

array2 = np.array([ /*элСмСнты*/, dtype=np.complex)

Когда стоит Π·Π°Π΄Π°Ρ‡Π° Π·Π°Π΄Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ ΠΈΠ»ΠΈ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ Π² Python, ΠΈ Π΅Π³ΠΎ значСния Π½Π° Π΄Π°Π½Π½ΠΎΠΌ этапС нСизвСстны, происходит Π΅Π³ΠΎ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ нулями Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ zeros(). ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ ΠΈΠ· Π΅Π΄ΠΈΠ½ΠΈΡ† Ρ‡Π΅Ρ€Π΅Π· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ones(). ΠŸΡ€ΠΈ этом Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ число элСмСнтов ΠΈ число Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… массивов Π²Π½ΡƒΡ‚Ρ€ΠΈ:

К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Ρ‚Π°ΠΊ Π² Python происходит Π·Π°Π΄Π°Π½ΠΈΠ΅ Π΄Π²ΡƒΡ… массивов Π²Π½ΡƒΡ‚Ρ€ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎ Π΄Π»ΠΈΠ½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ Π΄Π²Π° элСмСнта:

array([ 
[[0, 0]] 
[[0, 0]]] 
) 

Если Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ вывСсти ΠΎΠ΄Π½ΠΎ- Π»ΠΈΠ±ΠΎ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив Π½Π° экран, Π²Π°ΠΌ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ функция print(). Π£Ρ‡Ρ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Ссли ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° слишком Π²Π΅Π»ΠΈΠΊΠ° для ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ, NumPy скроСт Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ ΠΈ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ лишь ΠΊΡ€Π°ΠΉΠ½ΠΈΠ΅ значСния. Π”Π°Π±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ массив ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ функция set_printoptions(). ΠŸΡ€ΠΈ этом ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ выводятся Π½Π΅ всС элСмСнты, Π° происходит Π²Ρ‹Π²ΠΎΠ΄ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠΉ тысячи. И это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ массива указываСтся Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° с ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом threshold.

Π‘Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π² NumPy

ВсС дСйствия, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π½Π°Π΄ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ массива, ΠΎΠ±ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ созданиСм Π½ΠΎΠ²ΠΎΠ³ΠΎ массива. ΠŸΡ€ΠΈ этом массивы ΠΈ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ Π² Ρ‚ΠΎΠΌ случаС, Ссли ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€:

array1 = np.array([[1, 2, 3], [1, 2, 3]])
array2 = np.array([[1, 2, 3], [1, 2, 3], [1, 2, 3]])

Если Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ array1 + array2, компилятор скаТСт ΠΎΠ± ошибкС, Π° всё ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ matrix Ρ€Π°Π²Π΅Π½ Π΄Π²ΡƒΠΌ, Π° Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ‚Ρ€Ρ‘ΠΌ.

array1 = np.array([1, 2, 5, 7]) 
array2 = arange([1, 5, 1]) 

Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС array1 + array2 Π²Π΅Ρ€Π½Ρ‘Ρ‚ Π½Π°ΠΌ массив со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ элСмСнтами: 2, 4, 8, 11. Π—Π΄Π΅ΡΡŒ Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ ошибки, Ρ‚. ΠΊ. ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹. ΠŸΡ€ΠΈΡ‡Ρ‘ΠΌ вмСсто Ρ€ΡƒΡ‡Π½ΠΎΠ³ΠΎ слоТСния часто ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π²Ρ…ΠΎΠ΄ΡΡ‰ΡƒΡŽ Π² класс ndarray sum():

np.array(array1 + array1) == array1 + array2

Π’ ndarray Π²Ρ…ΠΎΠ΄ΠΈΡ‚ большая Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… для выполнСния матСматичСских ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ.

Π€ΠΎΡ€ΠΌΠ° ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π² Python

Lenght matrix (Π΄Π»ΠΈΠ½Π° ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹) Π² Python опрСдСляСт Ρ„ΠΎΡ€ΠΌΡƒ. Π”Π»ΠΈΠ½Ρƒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ shape().

Массив с 2-мя Π»ΠΈΠ±ΠΎ 3-мя элСмСнтами Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ (2, 2, 3). И это состояниС измСнится, ΠΊΠΎΠ³Π΄Π° Π² shape() Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹: ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ β€” число подмассивов, Π²Ρ‚ΠΎΡ€ΠΎΠΉ β€” Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ подмассива.

Π’Π΅ ΠΆΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ reshape(). Π—Π΄Π΅ΡΡŒ lenght ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ matrix ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ числом столбцов ΠΈ строк.

Π•ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ для манипуляции Ρ„ΠΎΡ€ΠΌΠΎΠΉ. Допустим, ΠΏΡ€ΠΈ манипуляциях с Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΌΠΈ ΠΈΠ»ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΌΠΈ массивами ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ ΠΏΡƒΡ‚Ρ‘ΠΌ выстраивания Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎ Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°Π½ΠΈΡŽ. А Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ Π² ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ строки ΠΈ столбцы мСстами, ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ transpose().

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ со срСзами matrix Π² Python

Часто ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ Π½Π΅ с Ρ†Π΅Π»Ρ‹ΠΌ массивом, Π° с Π΅Π³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ. Π­Ρ‚ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° слайс (срСз). Он ΠΏΡ€ΠΈΡˆΠ΅Π» Π½Π° Π·Π°ΠΌΠ΅Π½Ρƒ Ρ†ΠΈΠΊΠ»Ρƒ for, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт подвСргался ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Ρƒ. ΠœΠ΅Ρ‚ΠΎΠ΄ позволяСт ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΊΠΎΠΏΠΈΠΈ matrix, ΠΏΡ€ΠΈΡ‡Ρ‘ΠΌ манипуляции Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π² Π²ΠΈΠ΄Π΅ [start:stop:step]. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС start β€” индСкс элСмСнта, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ бСрётся отсчёт, stop β€” послСдний элСмСнт, step β€” Ρ€Π°Π·ΠΌΠ΅Ρ€ шага ΠΈΠ»ΠΈ число пропускаСмых Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ элСмСнта ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ. Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ start Ρ€Π°Π²Π΅Π½ Π½ΡƒΠ»ΡŽ, stop β€” индСксу послСднСго элСмСнта, step β€” Π΅Π΄ΠΈΠ½ΠΈΡ†Π΅. Если Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π±Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ списка ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Ρ‘Ρ‚ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ.

Допустим, ΠΈΠΌΠ΅Π΅ΠΌ цСлочислСнный массив otus = [1, 2, 3, 4]. Для копирования ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ otus[:]. Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Ρ‘Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ [1, 2, 3, 4]. Но Ссли Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ станСт ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, допустим, -2, ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Ρ‘Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ ΡƒΠΆΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ…:

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. НапримСр, Ссли Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΅Ρ‰Ρ‘ ΠΎΠ΄Π½ΠΎ Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅, Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Π½ шаг ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… элСмСнтов. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, otus[::2] ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ вывСсти ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ [1, 3].

Если ввСсти ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, [::-2] отсчёт начнётся с ΠΊΠΎΠ½Ρ†Π°, ΠΈ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Ρ‘Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ [3, 1]. ΠžΡΡ‚Π°Ρ‘Ρ‚ΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ срСза позволяСт Π³ΠΈΠ±ΠΊΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ ΠΈ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ списками Π² Python.

Π₯ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ Π³ΠΎΡ€Π°Π·Π΄ΠΎ большС? Π—Π°ΠΏΠΈΡΡ‹Π²Π°ΠΉΡ‚Π΅ΡΡŒ Π½Π° курс Β«Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ PythonΒ»!

Π Π°Π±ΠΎΡ‚Π° с массивами Π½Π° Π‘ΠΈ. Π§Π°ΡΡ‚ΡŒ 1

Π”ΠΎΠ±Ρ€ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ суток, сСгодня ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ массивах, Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ тонкости заполнСния массивов Π² Π‘ΠΈ. Π’Π΅ΠΌΠ° нСслоТная, Π΄ΡƒΠΌΠ°ΡŽ, Π»Π΅Π³ΠΊΠΎ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘Ρ‚Π΅ΡΡŒ. Π˜Ρ‚Π°ΠΊ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°Ρ‡Π½Ρ‘ΠΌ.

Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ цСлочислСнный массив array_int[N] (N = 34) числами ΠΈΠ· Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° [-83; 90] ΠΈ массив array_double[N] Π΄Ρ€ΠΎΠ±Π½Ρ‹ΠΌΠΈ числами ΠΈΠ· Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° [-2.38; 6.57]. ВывСсти массивы Π½Π° экран Π² Π΄Π²Π΅ строки. ВывСсти массивы Π² Ρ„Π°ΠΉΠ» Π² Π΄Π²Π° столбца Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ Β«array_int[индСкс] = Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅; array_double[индСкс]= Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅Β».

Код:

#include <stdio.h>
#include <stdlib.h>
#define N 34

int main(void) {
	FILE*file;
	file = fopen("file.txt","w");
	int array_int[N], i, j;
	for (i = 1; i <= N; i++){
		array_int[i] = -83 +rand() % (90 + 83 + 1);
		printf("%d  ", array_int[i]);

	}
	printf("\n");
	double array_double[N],t;
	for (j = 1; j <= N;){
		t = rand() % 8 - 2 + (rand() % 95 - 38) / 100.0;
		if ((t <= 6.57 ) && (t >= -2.38)) {
                array_double[j] = t;
                printf("%.2lf  ", array_double[j]);
                j++;
		}

	}
	for (i = 1; i <= N; i++){
		fprintf(file, "array_int[%d] = %d\t array_double[%d] = %.2lf \n  ", i, array_int[i], i, array_double[i]);
	}
	fclose(file);
	return EXIT_SUCCESS;
}

Π’Ρ‹Π²ΠΎΠ΄:

Команд Π½ΠΎΠ²Ρ‹Ρ… Π½Π΅Ρ‚, Π½ΠΎ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎΠ± изюминкС Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ Ρ†ΠΈΠΊΠ»Π΅ (ΠΏΡ€ΠΈ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π΄Ρ€ΠΎΠ±Π½ΠΎΠ³ΠΎ массива):

Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ массив Π΄Ρ€ΠΎΠ±Π½Ρ‹ΠΌΠΈ Β«Ρ€Π°Π½Π΄ΠΎΠΌΠ½Ρ‹ΠΌΠΈΒ» числами ΠΈΠ· Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° [-2.38; 6.57], Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ сначала ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ†Π΅Π»Ρ‹Π΅ числа rand() % 8 β€” 2, Π³Π΄Π΅ 8 сумма Ρ†Π΅Π»ΠΎΠ³ΠΎ чисСл Ρƒ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ (-2.38 ΠΈ 6.57), Π·Π°Ρ‚Π΅ΠΌ ΡƒΠΆΠ΅ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΠΎΠ±Π½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ (rand() % 95 β€” 38) / 100.0, Π³Π΄Π΅ 95 сумма Π³Ρ€Π°Π½ΠΈΡ† ( 38 + 57 ).
ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ условиС if ((t = -2.38)), Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΡ‡Π½ΠΎ ΡƒΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΌ, Ρ‡Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Π½Π½ΠΎ Π² этом Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅.

А Ρ‚Π°ΠΊΠΆΠ΅ Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ я ΠΏΠΎΠΊΠ°Π·Π°Π», Ρ‡Ρ‚ΠΎ Ρƒ Ρ†ΠΈΠΊΠ»Π° for пСрСмСнная j ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² объявлСнии Ρ†ΠΈΠΊΠ»Π°, Π½ΠΎ ΠΈ посСрСдинС Π΅Π³ΠΎ.
Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ:

Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ массив array[20] стСпСнями числа 2, начиная с минус пятой стСпСни. ВывСсти массив Π½Π° экран Π² строку.

Код:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define N 20
int main(void) {
	int i,k;
	k = -5;
	double array[N];
	for (i = 0; i < N; i++){
		array[i] = pow(2,k);
		k++;
		printf("%.3lf  ", array[i]);
	}
	return EXIT_SUCCESS;
}

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, Π½ΠΈΡ‡Π΅Π³ΠΎ слоТного. Если Π²Ρ‹ осилили ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ Π² ΡΡ‚Π°Ρ‚ΡŒΡΡ…, Ρ‚ΠΎ это для вас Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊ, ΠΏΠ°Π»ΡŒΡ†Ρ‹ Ρ€Π°Π·ΠΌΡΡ‚ΡŒ =)
Π•Π΄Π΅ΠΌ дальшС.

Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив ΠΈΠ· 15 элСмСнтов случайными числами ΠΈΠ· Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° [-30; 16]. ВывСсти Π½Π° экран массив Π² строку. Найти ΠΏΠ΅Ρ€Π²ΠΎΠ΅ с ΠΊΠΎΠ½Ρ†Π° массива число, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΊΡ€Π°Ρ‚Π½ΠΎ 7, Ссли Ρ‚Π°ΠΊΠΈΡ… чисСл Π½Π΅Ρ‚, Ρ‚ΠΎ вывСсти сообщСниС ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ чисСл ΠΊΡ€Π°Ρ‚Π½Ρ‹Ρ… сСми Π½Π΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΎ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ break.

#include <stdio.h>
#include <stdlib.h>
#define N 15
int main(void) {
	int mas[N], i, k = 0;
	for (i = 0; i < N; i++){
		mas[i] = - 30 + rand() % (16 + 30 + 1);
		printf("%d  ", mas[i]);
	}
	for (i = N - 1; i >= 0; i--){
		if (mas[i] % 7 == 0) {
			printf("\n%d", mas[i]);
			k = 1;
			break;
		}
	}
	if (k == 0) printf("Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ");
	return EXIT_SUCCESS;
}

Break β€” ΠΊΠΎΠΌΠ°Π½Π΄Π° прСрывания Ρ†ΠΈΠΊΠ»Π° ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· Π½Π΅Π³ΠΎ, запуск ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΈ инструкций. Алгоритм Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° нСслоТСн.
И послСдний на сСгодня:

Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив ΠΈΠ· 20-Ρ‚ΠΈ элСмСнтов ΠΈΠ· Ρ„Π°ΠΉΠ»Π° input.txt ΠΈ вывСсти Π΅Π³ΠΎ Π½Π° экран. Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ элСмСнты массива, ΡƒΠΌΠ½ΠΎΠΆΠΈΠ² Ρ‡Π΅Ρ‚Π½Ρ‹Π΅ элСмСнты Π½Π° 2, Π° Π½Π΅Ρ‡Π΅Ρ‚Π½Ρ‹Π΅ β€” Π½Π° 3. ВывСсти ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹ΠΉ массив Π½Π° экран Π½Π° Π½ΠΎΠ²ΠΎΠΉ строкС.

#include <stdio.h>
#include <stdlib.h>

int main(void) {
	FILE*input;
	input = fopen("input.txt","r");
	int mas[20],i;
	for (i = 1; i <= 20; i++){
		fscanf(input, "%d", & mas[i]);
		printf("%d  ", mas[i]);
	}
	printf("\n");
	for (i = 1; i <= 20; i++){
		if (mas[i] % 2 == 0){
			mas[i] *= 2;
		}
		else {
			mas[i] *= 3;
		}
		printf("%d  ", mas[i]);
	}
	fclose(input);
	return EXIT_SUCCESS;
}

Π’Π²ΠΎΠ΄/Π²Ρ‹Π²ΠΎΠ΄:

Π’ΡƒΡ‚ Ρ‚ΠΎΠΆΠ΅ Π½ΠΈΡ‡Π΅Π³ΠΎ особСнного, поэтому Π½Π° этом ΠΈ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠΌ.=)

Π’ΠΎΡ‚ ΠΈ всё. ΠŸΠΈΡˆΠΈΡ‚Π΅ вопросы, ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅, всСм ΠΎΡ‚Π²Π΅Ρ‚ΠΈΠΌ.

ВсС исходники Π±Π΅Π· Ρ„Π°ΠΉΠ»ΠΎΠ² txt.
Π‘ΠΊΠ°Ρ‡Π°Ρ‚ΡŒ исходники Π·Π°Π΄Π°Ρ‡ΠΈ β€” 1
Π‘ΠΊΠ°Ρ‡Π°Ρ‚ΡŒ исходники Π·Π°Π΄Π°Ρ‡ΠΈ β€” 2
Π‘ΠΊΠ°Ρ‡Π°Ρ‚ΡŒ исходники Π·Π°Π΄Π°Ρ‡ΠΈ β€” 3
Π‘ΠΊΠ°Ρ‡Π°Ρ‚ΡŒ исходники Π·Π°Π΄Π°Ρ‡ΠΈ β€” 4

ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ ссылкой:

ΠŸΠΎΡ…ΠΎΠΆΠ΅Π΅

ДинамичСскиС массивы Π² Π‘ΠΈ

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ 1

ДинамичСскиС массивы Π² Π‘ΠΈ β€” это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ использования памяти элСктронной Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹.

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°, сущСствуСт ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊΠ° динамичСского распрСдСлСния памяти. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ массива ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΡ€ΠΈ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ объявлСния Π΄Π°Π½Π½ΠΎΠ³ΠΎ массива. МоТно Π·Π°Π΄Π°Ρ‚ΡŒ массиву ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΉ зафиксированный Ρ€Π°Π·ΠΌΠ΅Ρ€ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΡ‚ нуля Π΄ΠΎ ста элСмСнтов). Но Π² этом случаС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ с Π΅Ρ‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с массивом, состоящим Π½Π΅ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ ΠΈΠ· ста элСмСнтов. Π’ случаС использования, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Π΄Π²Π°Π΄Ρ†Π°Ρ‚ΠΈ элСмСнтов, ΠΎΠ±ΡŠΡ‘ΠΌ выдСляСмой памяти всё Ρ€Π°Π²Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ΄ сто элСмСнтов, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ массив Π±Ρ‹Π» заявлСн ΠΊΠ°ΠΊ статичСский. Π’ΠΎ Π΅ΡΡ‚ΡŒ Π½Π°Π»ΠΈΡ†ΠΎ ΠΌΠ°Π»ΠΎ эффСктивноС использованиС памяти.

ДинамичСскиС массивы

На языкС программирования Π‘ΠΈ динамичСскиС массивы Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΈ ΠΎΠ΄Π½Ρƒ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ динамичСского выдСлСния памяти: malloc() ΠΈΠ»ΠΈ са11ос(). Команда malloc() выполняСт Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ указатСля Π½Π° выдСляСмоС Π² памяти мСсто. Π­Ρ‚Π° функция являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ stdlib.h ΠΈ записываСтся Π² Ρ‚Π°ΠΊΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅:

void *Ρ‚Π°11ос (число Π±Π°ΠΉΡ‚)

Для сохранСния Π΄Π°Π½Π½Ρ‹Ρ… Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ², трСбуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ². Π§Ρ‚ΠΎΠ±Ρ‹ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Π½Π°Π΄ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ malloc() Π² ΠΊΡ€ΡƒΠ³Π»Ρ‹Ρ… скобках ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π·Π²Ρ‘Π·Π΄ΠΎΡ‡ΠΊΡƒ. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π° цСлочислСнный массив, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² Π½Π°Π΄ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ:

(int *)

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

Π“ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π° Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΡƒΡŽ Ρ‚Π΅ΠΌΡƒ

(int ) malloc(10 sizeof(int)))

Π’ языкС программирования Π‘++ прСдусмотрСны ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ new ΠΈ delete, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Π΅ для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ динамичСских массивов Π² памяти ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°. Команда new выполняСт Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти ΠΈΠ· свободных областСй, Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° delete ΠΎΡ‡ΠΈΡ‰Π°Π΅Ρ‚ эту ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти. ПослС окончания использования Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ памяти, ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‡ΠΈΡ‰Π΅Π½Π° ΠΎΡ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, ΠΏΠΎ этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ new ΠΈ delete ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π² ΠΏΠ°Ρ€Π΅. Если Π½Π΅ ΠΎΡ‡ΠΈΡ‰Π°Ρ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ Π² явном Π²ΠΈΠ΄Π΅, Ρ‚ΠΎ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ это ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Но ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡˆΡ‚Π°Ρ‚Π½ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π‘++ delete.

Команда new выполняСт созданиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, Π½Π°Π·Π½Π°Ρ‡Π°Π΅Ρ‚ для Π½Π΅Π³ΠΎ ΠΎΠ±ΡŠΡ‘ΠΌ памяти ΠΈ Π΄Π΅Π»Π°Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ указатСля ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π½Π° эту ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти. Π’ случаС нСвозмоТности выдСлСния памяти, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Π½Π΅Ρ‚ Π² Π½Π°Π»ΠΈΡ‡ΠΈΠΈ свободного ΠΎΠ±ΡŠΡ‘ΠΌΠ°, Ρ‚ΠΎ происходит Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ указатСля. ΠŸΠ°ΠΌΡΡ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π° ΠΏΠΎΠ΄ любой Π²ΠΈΠ΄ Π΄Π°Π½Π½Ρ‹Ρ…: int, float, double, char ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘ΠΌ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ динамичСского массива:

float *ptrarray = new float [10]; // объявлСн ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ динамичСский массив Π½Π° Π΄Π΅ΡΡΡ‚ΡŒ элСмСнтов.

// здСсь ptrarray – ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π²Ρ‹Π΄Π΅Π»ΡΠ΅ΠΌΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти для вСщСствСнного массива Ρ‚ΠΈΠΏΠ° float.

По Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡŽ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с динамичСским массивом, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ, которая Π²Ρ‹Π΄Π΅Π»ΡΠ»Π°ΡΡŒ для Π½Π΅Π³ΠΎ:

delete [] ptrarray; // очистка памяти, которая Π²Ρ‹Π΄Π΅Π»ΡΠ»Π°ΡΡŒ ΠΏΠΎΠ΄ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ динамичСский массив.

Π—Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ delete Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ освобоТдСния участка памяти, ΠΎΡ‚Π²Π΅Π΄Ρ‘Π½Π½ΠΎΠ³ΠΎ для ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива.

ДинамичСскиС массивы Π²Β C

Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ соврСмСнный ЯП Π²Ρ€ΠΎΠ΄Π΅ JS, Ρ‚ΠΎ массивы Π² Π‘ ΠΌΠΎΠ³ΡƒΡ‚ ввСсти вас Π² ступор.

ВступлСниС

Массив в JavaScript:

let numbers = [];
numbers.push(1);
numbers.push(2);
numbers.push(3);
console.log(numbers); // [1, 2, 3]

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊ Π±Ρ‹ ΠΌΡ‹ создали массив Π² JS. Π₯ΠΎΡ€ΠΎΡˆΠΎ Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ строк, сколько Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ.

Массив в C:

int numbers[3];
numbers[0] = 1;
numbers[1] = 2;
numbers[2] = 3;
printf("%d\n", numbers[0]); // 1
printf("%d\n", numbers[1]); // 2
printf("%d\n", numbers[2]); // 3

ΠŸΠ΅Ρ€Π²ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ numbers[3] Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ компилятору, Ρ‡Ρ‚ΠΎ массив сохранит Π² памяти 3 числа. Π”Π°Π»Π΅Π΅ сохраним 1,2 ΠΈ 3 ΠΏΠΎΠ΄ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ индСксами ΠΈ Π²Ρ‹Π²Π΅Π΄Π΅ΠΌ Π½Π° дисплСй.
Пока всС прСкрасно, Π½ΠΎ Π½ΠΎ нСльзя Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΅Ρ‰Ρ‘ элСмСнты:

int numbers[3];
numbers[0] = 1;
numbers[1] = 2;
numbers[2] = 3;
numbers[3] = 4;
printf("%d\n", numbers[0]); // 1
printf("%d\n", numbers[1]); // 2
printf("%d\n", numbers[2]); // 3
printf("%d\n", numbers[3]); // should be 4

И Ρ‡Ρ‚ΠΎ Π½Π° это скаТСт gcc?:

array.c:8:5: warning: array index 3 is past the end of the array (which contains 3 elements) [-Warray-bounds]

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ Π³Ρ€Π°Π½ΠΈΡ† памяти. ΠœΠ΅ΡΡ‚Π° Π² нашСм массивС нСдостаточно, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π΅Ρ‰Ρ‘ элСмСнты.
Π§Ρ‚ΠΎ ΠΆΠ΅, Ссли ΠΌΡ‹ нуТдаСмся Π² динамичСском массивС, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ n элСмСнтов?

На Π‘ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ массива с динамичСски растущим Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ.
Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π±Π»ΠΎΠΊΠΈ памяти.

malloc, realloc ΠΈΒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ (pointers)

Π’ Π‘ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠΌΠ΅Π΅Ρ‚ свой Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°:

Π’ΠΈΠΏ Π Π°Π·ΠΌΠ΅Ρ€ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π”ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ
char 1 byte -128 Π΄ΠΎ 127 ΠΈΠ»ΠΈ 0 Π΄ΠΎ 255
unsigned char 1 byte 0 Π΄ΠΎ 255
signed char 1 byte -128 Π΄ΠΎ 127
int 2 ΠΈΠ»ΠΈ 4 bytes -32,768 Π΄ΠΎ 32,767 ΠΈΠ»ΠΈ -2,147,483,648 Π΄ΠΎ 2,147,483,647
unsigned int 2 ΠΈΠ»ΠΈ 4 bytes 0 Π΄ΠΎ 65,535 ΠΈΠ»ΠΈ 0 Π΄ΠΎ 4,294,967,295
short 2 bytes -32,768 to 32,767
unsigned short 2 bytes 0 Π΄ΠΎ 65,535
long 8 bytes -9223372036854775808 Π΄ΠΎ 9223372036854775807
unsigned long8 bytes0 Π΄ΠΎ 18446744073709551615

Π’ ΠΌΠΎΠ΅ΠΉ систСмС это 4 Π±Π°ΠΉΡ‚Π° для Ρ†Π΅Π»Ρ‹Ρ… чисСл (integers). ΠŸΡ€ΠΎΡΡ‚ΠΎ имСя эти Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ динамичСскиС массивы любого Ρ€Π°Π·ΠΌΠ΅Ρ€Π°.
Π Π°Π·ΠΌΠ΅Ρ€ Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ sizeof(int), sizeof(double) ΠΈΠ»ΠΈ для Ρ‚Π΅Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π°ΠΌ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ.
Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ malloc ΠΈ realloc ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ динамичСскиС Π±Π»ΠΎΠΊΠΈ памяти.

Допустим, ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π½Π°Ρ‡Π°Ρ‚ΡŒ с возмоТности Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ 3 Ρ†Π΅Π»Ρ‹Ρ… числа (integers),это ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Π²Ρ‹Π΄Π΅Π»ΠΈΠ² Π±Π»ΠΎΠΊ памяти ΠΈΠ· 12 Π±Π°ΠΉΡ‚:

ЕдинствСнным Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ malloc являСтся Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±Π»ΠΎΠΊΠ° памяти Π² Π±Π°ΠΉΡ‚Π°Ρ….
Malloc Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ(pointer) Π½Π° вновь созданный Π±Π»ΠΎΠΊ памяти.

#define INITIAL_CAPACITY 3
int main(){
     int* data = malloc(INITIAL_CAPACITY * sizeof(int));
}

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ нас Π΅ΡΡ‚ΡŒ Π±Π»ΠΎΠΊ памяти, достаточно большой, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ наши 3 Ρ†Π΅Π»Ρ‹Ρ… числа — Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π³ΠΎ динамичСским. БСйчас ΠΌΡ‹ всС Π΅Ρ‰Ρ‘ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ большС 3-Ρ… элСмСнтов Π² наш Π±Π»ΠΎΠΊ памяти.

Если ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈ объСмом ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ памяти, ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€. Если Π±Π»ΠΎΠΊ памяти Π·Π°ΠΏΠΎΠ»Π½Π΅Π½, ΡƒΠ΄Π²ΠΎΠΈΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ этого Π±Π»ΠΎΠΊΠ° памяти, ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π²Ρ‹Π·Π²ΠΎΠ²Π° realloc , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ просто Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Π±Π»ΠΎΠΊ памяти.

#define INITIAL_CAPACITY 3
void push(int *arr, int index, int value, int *size, int *capacity){
     int* ptr;
     if(*size > *capacity){
          ptr = realloc(arr, sizeof(arr) * 2);
          if(ptr == NULL)
               exit(0);
          else
               *capacity = sizeof(arr) * 2;
     }
Β 
     arr[index] = value;
     *size = *size + 1;
}
int main(){
     int size = 0;
     int capacity = INITIAL_CAPACITY;
     int* arr = malloc(INITIAL_CAPACITY * sizeof(int));
}

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ элСмСнты Π² Π±Π»ΠΎΠΊ памяти динамичСски.
Π‘ΠΎΠ±Ρ€Π°Π² всС это вмСстС, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ:

#include <stdio.h>
#include <stdlib.h>
Β 
#define INITIAL_CAPACITY 2
Β 
void push(int *arr, int index, int value, int *size, int *capacity){
     int* ptr;
     if(*size > *capacity){
          ptr = realloc(arr, sizeof(arr) * 2);
          if(ptr == NULL)
               exit(0);
          else
               *capacity = sizeof(arr) * 2;
     }
Β 
     arr[index] = value;
     *size = *size + 1;
}
Β 
int main(){
     int size = 0;
     int capacity = INITIAL_CAPACITY;
     int* arr = malloc(INITIAL_CAPACITY * sizeof(int));
     if(arr == NULL) {
          printf("Memory not allocated.\n");
          exit(0);
     }
     else {
          push(arr, 0, 1, &size, &capacity);
          push(arr, 1, 2, &size, &capacity);
          push(arr, 2, 3, &size, &capacity);
Β 
          printf("Current capacity: %d\n", capacity); // Current capacity: 2
Β 
          push(arr, 3, 4, &size, &capacity);
          push(arr, 4, 5, &size, &capacity);
          push(arr, 5, 6, &size, &capacity);
Β 
          printf("Current capacity: %d\n", capacity); // Current capacity: 16
     }
}

ΠœΠ°ΡΡΠΈΠ²Ρ‹ Π² Π‘ΠΈ Π¨Π°Ρ€ΠΏ (C#) Π½Π° видСокурсС ΠΎΡ‚ Loftblog

ВсСм Π΄ΠΎΠ±Ρ€ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ суток! На ΠΏΡ€ΠΎΡˆΠ»Ρ‹Ρ… Π²ΠΈΠ΄Π΅ΠΎΡƒΡ€ΠΎΠΊΠ°Ρ… ΠΌΡ‹ познакомились с ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°ΠΌΠΈ ООП: наслСдованиСм, инкапсуляциСй ΠΈ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠΎΠΌ. БСгодня Π΄Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим Ρ‚Π°ΠΊΠΎΠ΅ понятиС, ΠΊΠ°ΠΊ массивы Π² Π‘ΠΈ Π¨Π°Ρ€ΠΏ ΠΈ научимся Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ.

НСмного ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ массивах

На ΠΏΡ€ΠΎΡˆΠ»Ρ‹Ρ… Π²ΠΈΠ΄Π΅ΠΎΡƒΡ€ΠΎΠΊΠ°Ρ… ΠΌΡ‹ ΡƒΠΆΠ΅ знакомились с понятиСм ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Π­Ρ‚ΠΎ ячСйка Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти, которая содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. Π’Π°ΠΊ Π²ΠΎΡ‚, массивы Π² Π‘ΠΈ Π¨Π°Ρ€ΠΏ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… языках программирования, – это конструкция, которая позволяСт ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ нСсколько Ρ‚Π°ΠΊΠΈΡ… ячССк, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ это ΡΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΡ‚ΠΈΠΏΠ½Ρ‹Ρ… ячССк.

Π’Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ массив – это упорядочСнная ΡΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π² Π½Π΅ΠΌ упорядочСны ΠΏΠΎ индСксу, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ индСксация начинаСтся с нуля. ΠœΠ°ΡΡΠΈΠ²Ρ‹ Π±Ρ‹Π²Π°ΡŽΡ‚ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΌΠΈ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΌΠΈ.

Π”Π°Π²Π°ΠΉΡ‚Π΅ разбСрСмся, ΠΊΠ°ΠΊ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ (ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ) ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с массивами Π² Π‘ΠΈ Π¨Π°Ρ€ΠΏ. Π Π°Π·Π΄Π΅Π»ΠΈΠΌ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΡƒ Π½Π° Π΄Π²Π΅ части: ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы.

ΠŸΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° с ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΌΠΈ массивами Π² Π‘ΠΈ Π¨Π°Ρ€ΠΏ

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ аспСкт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, – это объявлСниС (инициализация) массива. ΠžΠ±Ρ‰Π°Ρ конструкция Π΄Π²ΡƒΡ… способов ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ:

  • Ρ‚ΠΈΠΏ[] имя_массива = new Ρ‚ΠΈΠΏ[количСство_ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…];
  • Ρ‚ΠΈΠΏ[] имя_массива = new Ρ‚ΠΈΠΏ[] {пСрСчислСниС_Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ};

Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ Π΄Π²Π° массива Π² Π‘ΠΈ Π¨Π°Ρ€ΠΏ – массив мСсяцСв ΠΈ массив Π΄Π½Π΅ΠΉ:

string[] mounths = new string[] {«January», «February», «March»};
string[] days = new string[7];



string[] mounths = new string[] {«January», «February», «March»};

string[] days = new string[7];

Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ обратимся ΠΊ массиву. Π’Π°ΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ индСксация массива начинаСтся с 0. ΠžΠ±Ρ‰Π°Ρ конструкция обращСния:

имя_массива[индСкс_элСмСнта] = значСния;



имя_массива[индСкс_элСмСнта] = значСния;

Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° присвоим ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ элСмСнту массива Π΄Π½Π΅ΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Β«MondayΒ»:

ΠŸΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° с ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΌΠΈ массивами Π² Π‘ΠΈ Π¨Π°Ρ€ΠΏ

ΠœΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΌ массивом Π² Π‘ΠΈ Π¨Π°Ρ€ΠΏ ΠΈ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ называСтся массив, ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‰ΠΈΠΉ двумя ΠΈΠ»ΠΈ большим количСством размСрностСй. ΠŸΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива являСтся Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив. Π—Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π΅ΡΡ‚ΡŒ строчки ΠΈ столбцы, Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ индСкс. Как ΠΆΠ΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ массивы Π² Π‘ΠΈ Π¨Π°Ρ€ΠΏ? ΠžΡ‡Π΅Π½ΡŒ просто:

  • Ρ‚ΠΈΠΏ[,] имя_массива = new Ρ‚ΠΈΠΏ[,] {{_, _}, …, {_, _}};

ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ запятых Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобках Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎ размСрности массива.

Π‘ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ΠΌ ΠΊ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠΌΡƒ массиву всС Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ с ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ΠΌ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠΌΡƒ, Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ ΡƒΠΆΠ΅ Π΄Π²Π° индСкса – Π½ΠΎΠΌΠ΅Ρ€ строки, Π° ΠΏΠΎΡ‚ΠΎΠΌ Π½ΠΎΠΌΠ΅Ρ€ столбца.

На этом Π²ΠΈΠ΄Π΅ΠΎΡƒΡ€ΠΎΠΊ наш, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±ΡƒΠ΄ΡƒΡ‚ рассмотрСны массивы Π² Π‘ΠΈ Π¨Π°Ρ€ΠΏ, Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ! НадССмся,Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΎΠΊΠ°ΠΆΠ΅Ρ‚ Π²Π°ΠΌ ΠΏΠΎΠ»ΡŒΠ·Ρƒ. Π”ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… встрСч!

ΠŸΡ€ΠΈΡΡ‚Π½ΠΎΠ³ΠΎ всСм просмотра! Π£Ρ‡ΠΈΡ‚Π΅ΡΡŒ с ΡƒΠ΄ΠΎΠ²ΠΎΠ»ΡŒΡΡ‚Π²ΠΈΠ΅ΠΌ! ВсСгда ваш LoftBlog.

Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌΡ‹Π΅ курсы

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

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

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

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

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

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

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

Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ любоС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΊΡ€ΠΎΠΌΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° запятой, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ количСство элСмСнтов Π² массивС
ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ любая комбинация ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² const , restrict ΠΈΠ»ΠΈ volatile , Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π½Π°Ρ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² списках ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ; это опрСдСляСт Ρ‚ΠΈΠΏ указатСля, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСобразуСтся этот ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ массива
attr-spec-seq (C23) Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ список Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ², примСняСмых ΠΊ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½ΠΎΠΌΡƒ массиву
 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};
    ΠΏΡ€ΠΈΡ‡ΡƒΠ΄Π° (Π°, Π±); // OK
    Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ x [5] = {0};
    ΠΏΡ€ΠΈΡ‡ΡƒΠ΄Π° (Ρ…, Π±); // Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅: слишком малСнький Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ массива
} 

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

 int f (const int a [20])
{
 // Π² этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ a ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ const int * (ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° const int)
}
int g (const int a [const 20])
{
 // Π² этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ a ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ const int * 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]; // Ошибка: Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина с ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ Ρ„Π°ΠΉΠ»Π°
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) [ΠΌ]; // ОК: ΠΎΠ±Π»Π°ΡΡ‚ΡŒ дСйствия Π±Π»ΠΎΠΊΠ° / автоматичСская Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π’Πœ
    s = malloc (m * sizeof (int)); // ОК: s ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° VLA Π² Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅
// extern 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):

 внСшний 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) (Ρ‡Ρ‚ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ typedef), Ρ‚ΠΈΠΏ массива Π½Π΅ квалифицируСтся, Π½ΠΎ Ρ‚ΠΈΠΏ Π΅Π³ΠΎ элСмСнта:

(Π΄ΠΎ C23)

Π’ΠΈΠΏ массива ΠΈ Ρ‚ΠΈΠΏ Π΅Π³ΠΎ элСмСнта всСгда ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎ ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Ρ‚ΠΈΠΏ массива Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ считаСтся ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ _Atomic .

(начиная с C23)
 typedef int A [2] [3];
const A a = {{4, 5, 6}, {7, 8, 9}}; // массив массива const int
int * pi = a [0]; // Ошибка: a [0] ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ const int *
void * unqual_ptr = a; // ОК до C23; ошибка с C23
// ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡ: clang примСняСт ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π² C ++ / C23 Π΄Π°ΠΆΠ΅ Π² Ρ€Π΅ΠΆΠΈΠΌΠ°Ρ… C89-C17 

_Atomic нСльзя ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΊ Ρ‚ΠΈΠΏΡƒ массива, хотя Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ массив Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°.

 typedef int A [2];
// _Atomic A a0 = {0}; // Ошибка
// _Atomic (A) a1 = {0}; // Ошибка
_Atomic int a2 [2] = {0}; // OK
_Atomic (int) a3 [2] = {0}; // ОК 
(начиная с C11)
[ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ] НазначСниС

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ‚ΠΈΠΏΠ° массива Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ измСняСмыми 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 a [2] [3] = {{1,2,3}, // ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ 2x3
               {4,5,6}}; // с ΠΌΠ°ΠΊΠ΅Ρ‚ΠΎΠΌ строкового Ρ‚ΠΈΠΏΠ° 

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

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

ΠœΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΈ, Ссли ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ VLA (начиная с C11):

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

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

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

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

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

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

    Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚

  • C17 (ISO / IEC 9899: 2018):
  • 6.7.6.2 Π”Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ массивов (стр. 94-96)
    Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚

  • 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 Π”Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ массивов

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

ARR02-C. Π―Π²Π½ΠΎ ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ массива, Π΄Π°ΠΆΠ΅ Ссли нСявно ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠΌ - SEI CERT C Coding Standard

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ C позволяСт ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ массива ΠΊΠ°ΠΊ с привязкой, Ρ‚Π°ΠΊ ΠΈ с Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠΌ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.Π›ΠΈΡ‚Π΅Ρ€Π°Π» ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ массива, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ числом элСмСнтов.

Π Π°Π·ΠΌΠ΅Ρ€, ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅ΠΌΡ‹ΠΉ Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠΌ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ опрСдСляСтся количСством элСмСнтов,

 массив int [] = {1, 2, 3}; / * ВрСхэлСмСнтный массив * /
 

, Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ элСмСнтов массива нСсмСТными способами. Π’ ΠΏΠΎΠ΄ΠΏΡƒΠ½ΠΊΡ‚Π΅ 6.7.9, ΠΏΡ€ΠΈΠΌΠ΅Ρ€ 12 стандарта C [ISO / IEC 9899: 2011] ΡƒΠΊΠ°Π·Π°Π½ΠΎ:

ΠŸΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚Π²ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Β«Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΎΒ» с ΠΎΠ±ΠΎΠΈΡ… ΠΊΠΎΠ½Ρ†ΠΎΠ² массива с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ΄Π½ΠΎΠ³ΠΎ указатСля:

 int a [MAX] = {
  1, 3, 5, 7, 9, [MAX-5] = 8, 6, 4, 2, 0
};
 

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, Ссли MAX большС дСсяти, Π² сСрСдинС Π±ΡƒΠ΄ΡƒΡ‚ элСмСнты с Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ; Ссли ΠΎΠ½ΠΎ мСньшС дСсяти, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, прСдоставлСнных ΠΏΠ΅Ρ€Π²Ρ‹ΠΌΠΈ ΠΏΡΡ‚ΡŒΡŽ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ, Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°ΠΌΠ΅Ρ‰Π΅Π½Ρ‹ Π²Ρ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΏΡΡ‚ΡŒΡŽ.

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ C Ρ‚Π°ΠΊΠΆΠ΅ опрСдСляСт, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ инициализация массива, ΠΊΠΎΠ³Π΄Π° количСство элСмСнтов ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π΅ Ρ€Π°Π²Π½ΠΎ явной Π³Ρ€Π°Π½ΠΈΡ†Π΅ массива. ΠŸΠΎΠ΄ΠΏΡƒΠ½ΠΊΡ‚ 6.7.9, ΠΏΠ°Ρ€Π°Π³Ρ€Π°Ρ„Ρ‹ 21 ΠΈ 22, гласит:

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

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

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ эта рСкомСндация Π½Π΅ примСняСтся (Π²ΠΎ всСх случаях) ΠΊ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ массивам, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ строковыми Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π°ΠΌΠΈ. Π‘ΠΌ. STR11-C. Для получСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΠΉΡ‚Π΅ Π³Ρ€Π°Π½ΠΈΡ†Ρƒ массива символов, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ строковым Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠΌ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ нСсовмСстимого ΠΊΠΎΠ΄Π° (Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€)

Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ нСсовмСстимого ΠΊΠΎΠ΄Π° ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ массив Ρ†Π΅Π»Ρ‹Ρ… чисСл с использованиСм ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ со слишком большим количСством элСмСнтов для массива:

Π Π°Π·ΠΌΠ΅Ρ€ массива a Ρ€Π°Π²Π΅Π½ 3, хотя Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ€Π°Π²Π½ΠΎ 4.ПослСдний элСмСнт ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ( 4 ) игнорируСтся. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ компиляторов Π΄ΠΈΠ°Π³Π½ΠΎΡΡ‚ΠΈΡ€ΡƒΡŽΡ‚ эту ΠΎΡˆΠΈΠ±ΠΊΡƒ.

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΡΡ‚ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ

Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ нСсовмСстимого ΠΊΠΎΠ΄Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π² GCC. Microsoft Visual Studio Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ„Π°Ρ‚Π°Π»ΡŒΠ½ΡƒΡŽ диагностику: ошибка C2078: слишком ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² .

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π½Π΅ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠ΄Π° (нСявный Ρ€Π°Π·ΠΌΠ΅Ρ€)

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

БовмСстимоС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅

Π­Ρ‚ΠΎ совмСстимоС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ явно ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π³Ρ€Π°Π½ΠΈΡ†Ρƒ массива:

Π―Π²Π½ΠΎΠ΅ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ массива, хотя ΠΎΠ½ΠΎ нСявно опрСдСляСтся ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠΌ, позволяСт компилятору ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ инструмСнту статичСского Π°Π½Π°Π»ΠΈΠ·Π° Π²Ρ‹Π΄Π°Π²Π°Ρ‚ΡŒ диагностику, Ссли эти значСния Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚ .

Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ

ARR02-C-EX1: STR11-C. НС ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΠΉΡ‚Π΅ Π³Ρ€Π°Π½ΠΈΡ†Ρƒ символьного массива, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ строковым Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠΌ, - это ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· этой Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ; ΠΎΠ½ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π³Ρ€Π°Π½ΠΈΡ†Π° символьного массива, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ строковым Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠΌ, Π½Π΅ Π±Ρ‹Π»Π° ΡƒΠΊΠ°Π·Π°Π½Π°.

ΠžΡ†Π΅Π½ΠΊΠ° рисков

Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ приоритСтности

ARR02-C

РСкомСндация

Π‘Π΅Ρ€ΡŒΠ΅Π·Π½ΠΎΡΡ‚ΡŒ

Π’Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ

9

9

Π‘Ρ€Π΅Π΄Π½ΠΈΠΉ

ΠœΠ°Π»ΠΎΠ²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎ

Низкий

P6

L2

Поиск

АвтоматичСскоС ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅

Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡ этого ΠΏΡ€Π°Π²ΠΈΠ»Π° Π½Π° сайтС CERT.

ΠžΠ±ΠΎΠ·Π½Π°Ρ‡ΡŒΡ‚Π΅ здСсь (ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈ опрСдСлСния)

Библиография


C ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° для увСличСния ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта массива Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ ΠΈ ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ массива

Π­Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт массива Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ ΠΈ ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΉ массив.

ОписаниС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹

Π­Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π° языкС C, которая ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт массива Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ & print массив. Нам Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ 1 ΠΊΠΎ всСм элСмСнтам Π΄Π°Π½Π½ΠΎΠ³ΠΎ массива.

РСшСниС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹

1. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ массив Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ Π΅Π³ΠΎ элСмСнты.
2. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ созданный массив Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°.
3. Π’Π½ΡƒΡ‚Ρ€ΠΈ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ†ΠΈΠΊΠ»Π° for ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ элСмСнту массива, Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ 1 ΠΊ элСмСнту ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ это Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ мСстС.
4. РаспСчатайтС массив.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° / исходный ΠΊΠΎΠ΄

Π’ΠΎΡ‚ исходный ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ C для увСличСния ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта массива Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ & print array.ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ скомпилирована ΠΈ протСстирована с использованиСм компилятора Turbo C Π² срСдС Windows. Π’Ρ‹Π²ΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ Π½ΠΈΠΆΠ΅.

  1.  
  2.  / * 
  3.  * ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π° C для увСличСния ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта массива Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ & ΠŸΠ΅Ρ‡Π°Ρ‚ΡŒ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ массива 
  4.  * / 
  5.  
  6.  #include 
  7.  void incrementArray (int []); 
  8.  пусто main () 
  9.  {
  10.  
  11.  int i; 
  12.  массив int [4] = {10, 20, 30, 40}; 
  13.  incrementArray (массив); 
  14.  для (i = 0; i <4; i ++) 
  15.  printf ("% d \ t", array [i]); // ΠŸΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ 2, 3, 4, 5 
  16.  
  17. } 
  18.  
  19.  ΠΏΡ€ΠΈΡ€Π°Ρ‰Π΅Π½ΠΈΠ΅ пустоты Array (int arr []) 
  20.  {
  21. int

  22.  {
  23. int

  24. ;
  25.  для (i = 0; i <4; i ++) 
  26.  arr [i] ++; // это измСняСт значСния Π² массивС Π² main () 
  27.  
  28. } 

ОписаниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

1.

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

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