ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании студСнчСских Ρ€Π°Π±ΠΎΡ‚
АнтистрСссовый сСрвис

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° массивов. 
Π’Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ программирования

Π Π΅Ρ„Π΅Ρ€Π°Ρ‚ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

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

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° массивов. Π’Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ программирования (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

Массив — это нСпрСрывная ΠΏΠΎ Ρ€Π°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ Π² ΠΏΠ°ΠΌΡΡ‚ΠΈ поимСнованная ΡΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ…, состоящая ΠΈΠ· Ρ„иксированного числа элСмСнтов ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°.

Как ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, массив Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ объявлСн. Бинтаксис объявлСния массива:

[] [] Π³Π΄Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ — количСство элСмСнтов массива. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ элСмСнтов указываСтся Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобках.

Массив ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ любой класс памяти, ΠΊΡ€ΠΎΠΌΠ΅ register.

ΠœΠ°ΡΡΠΈΠ²Ρ‹ Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒΡŽ. Говорят ΠΎ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠΌ массивС (рядС Π΄Π°Π½Π½Ρ‹Ρ…), Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠΌ массивС (Ρ‚Π°Π±Π»ΠΈΡ†Π΅) ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅ — N-ΠΌΠ΅Ρ€Π½ΠΎΠΌ массивС. Π’ ΡΠ·Ρ‹ΠΊΠ΅ C/C++ прСдусмотрСно понятиС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива. ΠœΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ массив, состоящий ΠΈΠ· ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΎΠ² Ρ‚ΠΈΠΏΠ° массив.

// объявлСниС ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива ΠΈΠ· 10 Ρ†Π΅Π»Ρ‹Ρ… чисСл.

int Π°[10] ;

// объявлСниС Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива вСщСствСнных.

// чисСл, состоящСго ΠΈΠ· 3 строк ΠΈ 4 столбцов.

float b[3][4];

Для обращСния ΠΊ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌΡƒ элСмСнту массива ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ опСрация индСксации «[]». ИндСкс — это порядковый Π½ΠΎΠΌΠ΅Ρ€ элСмСнта Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΈ. Π˜Π½Π΄Π΅ΠΊΡΠ°Ρ†ΠΈΡ элСмСнтов начинаСтся с 0.

НапримСр, ΠΏΡ€ΠΈ объявлСнии массива int Π°[4] этот массив Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠ· Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… элСмСнтов: Π°[0], Π°[1], Π°[2], Π°[3].

ΠŸΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Ρƒ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива Π·Π°Π΄Π°ΡŽΡ‚ΡΡ Π΄Π²Π° индСкса: ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½ΠΎΠΌΠ΅Ρ€ строки, Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ — Π½ΠΎΠΌΠ΅Ρ€ столбца, Π½Π° ΠΏΠ΅Ρ€Π΅ΡΠ΅Ρ‡Π΅Π½ΠΈΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… находится элСмСнт.

НапримСр, Π¬[1][3] — это элСмСнт, находящийся Π½Π° ΠΏΠ΅Ρ€Π΅ΡΠ΅Ρ‡Π΅Π½ΠΈΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΉ строки ΠΈ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ столбца Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива b (Π½ΠΎΠΌΠ΅Ρ€Π° строк ΠΈ ΡΡ‚ΠΎΠ»Π±Ρ†ΠΎΠ² ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΡƒΡŽΡ‚ΡΡ с 0).

ИндСкс, ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ индСксации, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ†Π΅Π»ΠΎΠΉ константой, Ρ†Π΅Π»ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ»ΠΈ Π»ΡŽΠ±Ρ‹ΠΌ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Ρ†Π΅Π»ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°.

Π’ ΠΏΠ°ΠΌΡΡ‚ΠΈ массив хранится Π² Π²ΠΈΠ΄Π΅ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ… Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ (x0-x^x2-…-xn,x)-S Π±Π°ΠΉΡ‚, Π³Π΄Π΅ ΠΏ — количСство ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ массива; Ρ…, — Ρ…ΠΏΠ› — количСство элСмСнтов массива Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΈ; S — Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ… элСмСнтов массива. НапримСр, массив int Ρ…[3][4] Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ Π² ΠΏΠ°ΠΌΡΡ‚ΠΈ 3−4-4 = 48 Π±Π°ΠΉΡ‚.

Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΠ°ΠΌΡΡ‚ΡŒ Π»ΠΈΠ½Π΅ΠΉΠ½Π°, Ρ‚ΠΎ ΠΌΠ°ΡΡΠΈΠ² любой размСрности Π² ΠΏΠ°ΠΌΡΡ‚ΠΈ хранится ΠΊΠ°ΠΊ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив, состоящий ΠΈΠ· Ρ…0 β€’ Ρ…{ -Ρ…2 β€’… -Ρ…ΠΏΠ› элСмСнтов. НомСр элСмСнта Π² ΡΡ‚ΠΎΠΌ массивС ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ ΠΏΠΎ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π΅.

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° массивов. Π’Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ программирования.

Π³Π΄Π΅ ik — индСкс элСмСнта Π² k-u ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΈ. НапримСр, Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ Ρ…[2][4][3] элСмСнт Ρ…[1][3][2] Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π½ΠΎΠΌΠ΅Ρ€

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° массивов. Π’Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ программирования.

ΠŸΡ€ΠΈ объявлСнии массива ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π½Π°Π±ΠΎΡ€ΠΎΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Ρ… Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ с ΠΊΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎΠΌ элСмСнтов массива. Если Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ мСньшС, Ρ‚ΠΎ ΠΎΡΡ‚Π°Π²ΡˆΠΈΠ΅ΡΡ значСния элСмСнтов массива Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹. НапримСр:

// элСмСнты массива ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ // пСрСчислСнныС значСния int, Π° [5] ={5, 10, Π±, 7, 8};

// пСрСчислСнныС значСния ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Ρ‚Ρ€Π΅ΠΌ // элСмСнтам массива, послСдниС Π΄Π²Π° элСмСнта // Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ int Ρ…[5]={4, 2, 12}.

ΠŸΡ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ массив Π±Π΅Π· явного указания Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°. Π Π°Π·ΠΌΠ΅Ρ€ массива Π±ΡƒΠ΄Π΅Ρ‚ установлСн автоматичСски ΠΏΠΎ ΠΊΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²Ρƒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.

ΠŸΡ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов Ρ€Π°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ элСмСнтов ΠΏΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ям происходит Π² ΡΠΎΠΎΡ‚вСтствии с ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ массива:

int, Π° [3] [5] = {1, 2, 3, 4, 5, Π±, 7, 8, 9, 10, 11}.

Π’ ΡΡ‚ΠΎΠΌ массивС ΠΏΠ΅Ρ€Π²Ρ‹Π΅ ΠΏΡΡ‚ΡŒ элСмСнтов относятся ΠΊ Π½ΡƒΠ»Π΅Π²ΠΎΠΉ строкС массива, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡΡ‚ΡŒ — ΠΊ ΠΏΠ΅Ρ€Π²ΠΎΠΉ, Π² ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ строкС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ элСмСнта.

МоТно ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ массив ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

int Π°[3][5]=[1]

Π—Π΄Π΅ΡΡŒ Π³Ρ€ΡƒΠΏΠΏΡ‹ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, пСрСчислСнных Π² ΠΊΡ€ΡƒΠ³Π»Ρ‹Ρ… скобках, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ строку Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива.

ΠŸΡ€ΠΈ объявлСнии ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ самого Π»Π΅Π²ΠΎΠ³ΠΎ измСрСния.

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ массива Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π»ΡŽΠ±ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ: ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ, ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡ, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π½Π°Π΄ Π½ΠΈΠΌΠΈ Π»ΡŽΠ±Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ.

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

ВвСсти ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив, состоящий ΠΈΠ· 10 элСмСнтов. Π’Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ срСднСС арифмСтичСскоС массива. ВсС элСмСнты массива, мСньшиС срСднСго арифмСтичСского, Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½ΡƒΠ»Π΅ΠΌ. ВывСсти ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ массив ΠΈ ΠΊΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Π·Π°ΠΌΠ΅Π½.

#include.

#define N 10 int main ().

{.

// объявлСниС массива ΠΈΠ· 10 элСмСнтов int x[N];

// ΠΊ — количСство элСмСнтов, ΠΌΠ΅Π½ΡŒΡˆΠΈΡ… срСднСго // арифмСтичСского int i, k=0; float sr=0;

// sr — срСднСС арифмСтичСскоС элСмСнтов массива for (i = 0; i < N; i++).

{.

scanf («%d», &x[i]); // Π²Π²ΠΎΠ΄ ΠΈ ΡΡƒΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.

// ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠ³ΠΎ элСмСнта.

sr + = Ρ…[i];

}.

sr /= N; // вычислСниС срСднСго арифмСтичСского for (i = 0; i < N; i++).

// сравнСниС ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠ³ΠΎ элСмСнта со ΡΡ€Π΅Π΄Π½ΠΈΠΌ // арифмСтичСским if (x[i] < sr).

{.

// ΠΎΠ±Π½ΡƒΠ»Π΅Π½ΠΈΠ΅ элСмСнтов, ΠΌΠ΅Π½ΡŒΡˆΠΈΡ… срСднСго // арифмСтичСского Ρ… [i] = 0;

k++; // ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ количСства Π·Π°ΠΌΠ΅Π½.

}.

for (i = 0; i < N; i++).

printf («%d «, x[i]); // Π²Ρ‹Π²ΠΎΠ΄ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ³ΠΎ массива.

printf («%d %f», k, sr); // Π²Ρ‹Π²ΠΎΠ΄ количСства Π·Π°ΠΌΠ΅Π½ return 0;

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

ВвСсти Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 3×4. ΠŸΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ мСстами ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ элСмСнты массива. ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ массив вывСсти.

#include int main ().

{.

int x[3][4];

int max, imx, jmx, min, imn, jmn, y; for (int i = 0; i < 3; i + +) for (int j = 0; j < 4; j++).

scanf («%d», &x[i][j]); // Π²Π²ΠΎΠ΄ элСмСнтов массива max =x[0][0]; imx = 0; jmx — 0;

/* Π·Π° ΠΌΠ°ΠΊΡΠΈΠΌΡƒΠΌ принимаСтся ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт массива. ЗапоминаСтся Π½ΠΎΠΌΠ΅Ρ€ строки ΠΈ ΡΡ‚ΠΎΠ»Π±Ρ†Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… располоТСн максимум */ min = Ρ…[0][0]; imn = 0;

j mn = 0 ;

/* Π·Π° ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ принимаСтся ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт массива. ЗапоминаСтся Π½ΠΎΠΌΠ΅Ρ€ строки ΠΈ ΡΡ‚ΠΎΠ»Π±Ρ†Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… располоТСн ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ */.

for (int i = 0; i < 3; i++) for (int j = 0; j < 4; j++).

// Ссли ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ элСмСнт большС максимума if (Ρ… [i] [ j ] > max).

{.

// мСняСтся максимум ΠΈ Π΅Π³ΠΎ располоТСниС max = x[i][j]; imx = i; jmx = j;

}.

else.

// Ссли ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ элСмСнт мСньшС ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΠ° if (Ρ… [i] [ j ] < min).

{.

// мСняСтся ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΈ Π΅Π³ΠΎ располоТСниС min = Ρ…[i][j]; imn = i; jmn = j;

}.

Ρƒ = x[imx][jmx];

// ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ элСмСнт ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ // мСстами.

x[imx][jmx] = x[imn][jmn]; x[imn][jmn] = Ρƒ; for (int i = 0; i< 3; i++).

//Π²Ρ‹Π²ΠΎΠ΄ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ³ΠΎ массива.

{.

for (int j = 0; j < 4; j++) printf («%d «, x[i][j]); printf (««);

}.

return 0;

}.

Имя массива — это адрСс памяти, начиная с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ располоТСн массив, Ρ‚. Π΅. адрСс ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ элСмСнта массива. Π­Ρ‚ΠΎΡ‚ адрСс Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½, поэтому Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ массив являСтся константным ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π° ΠΎΠ±Π»Π°ΡΡ‚ΡŒ хранСния Π΅Π³ΠΎ Π΄Π°Π½Π½Ρ‹Ρ…. НапримСр:

int Ρ…[10]; // Ρ… ΡΠ²Π»ΡΠ΅Ρ‚ся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт.

// массива.

int j ;

int * Ρ€; Ρ€=Ρ…;

Ρ€ =&Ρ…[0]; j = Ρ… [ 3 ] ;

j = * (Ρ€+3).

// эти Π΄Π²Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°.

// ΠΏΡ€ΠΈΠ²Π΅Π΄ΡƒΡ‚ ΠΊ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΌΡƒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρƒ // эти Π΄Π²Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°.

// ΠΏΡ€ΠΈΠ²Π΅Π΄ΡƒΡ‚ ΠΊ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΌΡƒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρƒ Π”Π°Π½ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив, состоящий ΠΈΠ· ΠΏΡΡ‚ΠΈ элСмСнтов. ВсС ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ элСмСнты массива ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ Π½Π° 3, ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Π½Π° 3. ВывСсти ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½Ρ‹ΠΉ массив.

#include int main ().

// объявляСм ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ массив ΠΈΠ· ΠΏΡΡ‚ΠΈ элСмСнтов int Ρ…[] = {5, -10, 15, -20, 25}; int i, *Ρ€, *pl;

pi = Ρ…; // ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ pi ΡƒΡΡ‚Π°Π½ΠΎΠ²Π»Π΅Π½ Π½Π° Π½Π°Ρ‡Π°Π»ΠΎ // массива Ρ….

for (Ρ€ = Ρ…; Ρ€ < pi + 5; Ρ€++) // ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Ρ€ Π΄Π²ΠΈΠΆΠ΅Ρ‚ся.

//ΠΏΠΎ массиву Ρ….

{.

if (*Ρ€>0) // Ссли Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, записанноС ΠΏΠΎ // ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ, большС 0 *Ρ€ = *Ρ€ + 5; // ΠΎΠ½ΠΎ увСличиваСтся Π½Π° 5 else.

*Ρ€ = *Π  ~ 5; // ΠΈΠ½Π°Ρ‡Π΅ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ Π½Π° 5.

}.

for (Ρ€ = Ρ…; Ρ€ < pl + 5; Ρ€++) printf («%d «, *Ρ€); return 0;

Π Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‚ статичСскоС ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΠΎΠ΅ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти.

ΠŸΡ€ΠΈ статичСском Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠΈ объСм Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠΉ памяти извСстСн Π½Π° ΡΡ‚Π°ΠΏΠ΅ компиляции. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ выдСлСния ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ памяти ΠΏΡ€ΠΈ этом Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ автоматичСски: ΠΏΠ°ΠΌΡΡ‚ΡŒ выдСляСтся ΠΏΡ€ΠΈ объявлСнии ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ (массива ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…) ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅Ρ‚ся ΠΏΡ€ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΆΠΈΠ·Π½ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.

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

Для управлСния динамичСским Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ памяти ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΡ‹ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… прописаны Π² Ρ„Π°ΠΉΠ»Π΅ alloc. h ΠΈ stdlib. h: calloc, malloc, realloc, free.

Ѐункция calloc динамичСски выдСляСт Π±Π»ΠΎΠΊ памяти ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ нулями. Бинтаксис Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: calloc (size_t n, size_t s),.

Π³Π΄Π΅ n — количСство элСмСнтов, ΠΈΠΎΠ΄ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… выдСляСтся ΠΏΠ°ΠΌΡΡ‚ΡŒ; s — Ρ€Π°Π·ΠΌΠ΅Ρ€ памяти Π² Π±Π°ΠΉΡ‚Π°Ρ… для хранСния ΠΎΠ΄Π½ΠΎΠ³ΠΎ элСмСнта.

Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Π±Π»ΠΎΠΊ Π² ΡΠ»ΡƒΡ‡Π°Π΅ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ выдСлСния памяти ΠΈΠ»ΠΈ NULL, Ссли ΠΏΠ°ΠΌΡΡ‚ΡŒ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ. НапримСр:

int *Ρ€;

Ρ€ = calloc (5, sizeof (int));

выдСляСтся ΠΏΠ°ΠΌΡΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 5−4 = 20 Π±Π°ΠΉΡ‚ΠΎΠ², Π² ΡΠ»ΡƒΡ‡Π°Π΅ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ выдСлСния Π² Ρ€ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Π΅Ρ‚ся адрСс Π½Π°Ρ‡Π°Π»Π° Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°.

Ѐункция malloc динамичСски выдСляСт Π±Π»ΠΎΠΊ памяти Π±Π΅Π· ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΅Π³ΠΎ содСрТимого. Бинтаксис Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

malloc (size_t s).

Π³Π΄Π΅ s — Ρ€Π°Π·ΠΌΠ΅Ρ€ выдСляСмого Π±Π»ΠΎΠΊΠ° Π² Π±Π°ΠΉΡ‚Π°Ρ….

Π’Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Ρ„ункция calloc, malloc Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π½Π°Ρ‡Π°Π»ΠΎ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° памяти ΠΈΠ»ΠΈ NULL. НапримСр:

int *Ρ€;

Ρ€ = malloc (5*sizeof (int));

Ѐункция realloc ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ пСрСраспрСдСлСниС ΡƒΠΆΠ΅ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ памяти, увСличивая ΠΈΠ»ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ Π΅Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€. Бинтаксис Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

realloc (void *bl, size_t s).

Π³Π΄Π΅ bl — ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π±Π»ΠΎΠΊ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ динамичСской памяти; s — Π½ΠΎΠ²Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±Π»ΠΎΠΊΠ° Π«.

Если функция realloc Π²Ρ‹Π·Π²Π°Π½Π° для увСличСния Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ памяти, Ρ‚ΠΎ ΠΏΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ ΠΊ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ памяти добавляСтся Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠΉ участок Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° (вСсь Π±Π»ΠΎΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½Ρ‹ΠΉ участок памяти). Если Ρ‚Π°ΠΊΠΎΠΉ возмоТности Π½Π΅Ρ‚, Ρ‚ΠΎ Ρ„ункция ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° памяти Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Π½Π΅Π³ΠΎ Π΄Π°Π½Π½Ρ‹Ρ… старого Π±Π»ΠΎΠΊΠ° ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ старого Π±Π»ΠΎΠΊΠ°. ΠŸΡ€ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠΉ памяти Π½Π΅Π½ΡƒΠΆΠ½Ρ‹ΠΉ участок памяти освобоТдаСтся. Ѐункция realloc Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π½ΠΎΠ²Ρ‹ΠΉ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Π±Π»ΠΎΠΊ памяти ΠΈΠ»ΠΈ NULL, Ссли ΠΏΠ°ΠΌΡΡ‚ΡŒ Π½Π΅ Π±Ρ‹Π»Π° Π²Ρ‹Π΄Π΅Π»Π΅Π½Π° ΠΈΠ»ΠΈ Π΅Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ€Π°Π²Π΅Π½ Π½ΡƒΠ»ΡŽ.

Ѐункция free освобоТдаСт Π±Π»ΠΎΠΊ памяти, Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ функциями calloc, malloc ΠΈΠ»ΠΈ realloc. Бинтаксис Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

free (void* bl);

Π³Π΄Π΅ bl — ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅ΠΌΡ‹ΠΉ Π±Π»ΠΎΠΊ памяти.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 5.6.4.

ВвСсти динамичСский массив, состоящий ΠΈΠ· ΠΏ элСмСнтов. ΠŸΠΎΠ΄ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ количСство элСмСнтов массива, ΠΌΠ΅Π½ΡŒΡˆΠΈΡ… срСднСго арифмСтичСского.

#include.

#include int main () int n;

scanf («%d», &n); // Π²Π²ΠΎΠ΄ количСства элСмСнтов.

int i, k = 0; float sr = 0;

// динамичСскоС Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти int *x = (int *) calloc (n, sizeof (int)); if (x) // Ссли ΠΏΠ°ΠΌΡΡ‚ΡŒ Π²Ρ‹Π΄Π΅Π»ΠΈΠ»Π°ΡΡŒ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ.

{.

for (i = 0; i < n; i++).

{.

scanf («%d», &x[i]); // Π²Π²ΠΎΠ΄ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠ³ΠΎ элСмСнта sr += x[i]; // Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ элСмСнта ΠΊ ΡΡƒΠΌΠΌΠ΅.

}.

sr /= n; // вычислСниС срСднСго арифмСтичСского for (i = 0; i < n; i++) if (x[i] < sr).

{.

k++; // подсчСт количСства элСмСнтов, ΠΌΠ΅Π½ΡŒΡˆΠΈΡ… // срСднСго арифмСтичСского.

}.

printf<" % f %d", sr, k); // Π²Ρ‹Π²ΠΎΠ΄ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ².

free (x);

}.

else.

printf («memory error «); // Π²Ρ‹Π²ΠΎΠ΄ сообщСния ΠΎΠ±.

// ошибкС выдСлСния памяти.

return 0;

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

ВвСсти динамичСский массив, состоящий ΠΈΠ· ΠΏ элСмСнтов. Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² ΠΌΠ°ΡΡΠΈΠ² послС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ максимального элСмСнта Π½ΡƒΠ»ΠΈ, количСство ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ€Π°Π²Π½ΠΎ разности максимального ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ элСмСнтов.

#include ttinclude int main{).

{.

int i, n, m, k, r;

scanf («%d», &n); // Π²Π²ΠΎΠ΄ количСства элСмСнтов массива int *Ρ… = (int *)malloc (n*sizeof (int));

// динамичСскоС Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти для хранСния массива if (Ρ…).

{.

for (i = 0; i.

scanf («%d», &x[i]); // Π²Π²ΠΎΠ΄ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠ³ΠΎ элСмСнта.

// массива.

1; i.

// элСмСнта.

m = Ρ… [ 0 ]; ΠΊ = 0; for (i = if (x[i]>m).

// ΠΈ Π΅Π³ΠΎ мСста Π² ΠΌΠ°ΡΡΠΈΠ²Π΅.

{.

m = Ρ… [ i ]; ΠΊ = i;

}.

Π³ = x [ 0 ] ;

for (i = 1; i < n; i++) // Π½Π°Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅.

// минимального элСмСнта.

if (x [ i ] < r) r = x [ i ] ;

// ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ для хранСния // массива памяти Ρ… = (int *) realloc (Ρ…, (n+m-r)*sizeof (int));

if (x) // Ссли ΠΏΠ°ΠΌΡΡ‚ΡŒ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ.

{.

for (i = 0; i.

// элСмСнты массива, располоТСнныС послС // максимального, ΡΠ΄Π²ΠΈΠ³Π°ΡŽΡ‚ΡΡ Π²ΠΏΡ€Π°Π²ΠΎ for (i = k+1; i.

// Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² ΠΌΠ°ΡΡΠΈΠ² Π½ΡƒΠ»Π΅ΠΉ x[i] = 0;

// Π²Ρ‹Π²ΠΎΠ΄ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ³ΠΎ массива for < n+m-r; i++) printf («%d «, x[i]); free (x); // освобоТдСниС памяти

}

else

printf («memory error «);

}

else

printf («memory error «); return 0;

_}_

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

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

ВвСсти динамичСский Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив, состоящий ΠΈΠ· ΠΏ ΡΡ‚Ρ€ΠΎΠΊ ΠΈ Ρ‚ ΡΡ‚ΠΎΠ»Π±Ρ†ΠΎΠ². Найти срСднСС арифмСтичСскоС Π²Π²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ массива.

#include.

#include int main<).

{.

int n, m, s=0; int i, j;

int **x; // x — ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ.

scanf («%d %d», &n, &m) ;

// Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти ΠΏΠΎΠ΄ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Ρ… = (int **)calloc (n, sizeof (int)); for (i = 0; i < n; i + +).

{.

// Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти ΠΏΠΎΠ΄ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки // массива.

x[i] = (int *)calloc (m, sizeof (int)); for (j = 0; j < m; j++).

{.

scanf («%d», &x (i][j]); s += x [ i ] [ j ] ;

}.

}.

printf («%f», (float)s/n*m); free (x); return 0;

Π’Π°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ выдСлСния памяти являСтся ΠΎΡ‡Π΅Π½ΡŒ Ρ‚Ρ€ΡƒΠ΄ΠΎΠ΅ΠΌΠΊΠΈΠΌ, особСнно с ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ размСрности массива. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΏΡ€ΠΈ динамичСском Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠΈ памяти цСлСсообразно ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅, пСрСсчитывая ΠΈΡ… ΠΈΠ½Π΄Π΅ΠΊΡΡ‹.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 5.6.7.

Листинг ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° 5.6.6 с ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива ΠΊΠ°ΠΊ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ выглядит Ρ‚Π°ΠΊ: ttinclude.

#include int main ().

{.

int n, m, s=0; int i, j; int *x;

scanf («%d %d», &n, &m) ;

// Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти ΠΏΠΎΠ΄ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ всСго массива Ρ… = (int *)calloc (n*m, sizeof (int)); for (i = 0; i < n; i + +).

{.

for (j = 0; j < m; j++).

{.

scanf («%d», &x[i*n+j]); // использованиС.

// пСрСсчитанных.

s += x[i*n+j]; // индСксов массива.

).

).

printf («%f», (float)s/n*m); free (x); return 0;

  • [1] 1,2,3},{4,5,6,7,8},{9,10,11
ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ