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

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

Лабораторная Ρ€Π°Π±ΠΎΡ‚Π°ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

Массив ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Ρ€ΠΈ строки ΠΏΠΎ ΠΏΡΡ‚ΡŒ элСмСнтов Ρ‚ΠΈΠΏΠ° int. ΠŸΡ€ΠΈ этом A — это Π½Π°Ρ‡Π°Π»ΡŒΠ½Π°Ρ, строка ΠΈΠ· 5 элСмСнтов Ρ‚ΠΈΠΏΠ° int, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив ΠΈΠ· 5 элСмСнтов Ρ‚ΠΈΠΏΠ° int. Но Ρ‚ΠΈΠΏ ΠΈΠΌΠ΅Π½ΠΈ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива Π½Π΅ ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° этого массива. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ρ‚ΠΈΠΏ указатСля A — это int*, Π° Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ int. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ индСксации являСтся лСвоассоциативной ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ выполняСтся Π² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ слСва Π½Π°ΠΏΡ€Π°Π²ΠΎ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

ΠžΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ ΠΈ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

ΠšΠ°Ρ„Π΅Π΄Ρ€Π°: Автоматика ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ

ΠžΠ”ΠΠžΠœΠ•Π ΠΠ«Π• И Π”Π’Π£ΠœΠ•Π ΠΠ«Π• ΠœΠΠ‘Π‘Π˜Π’Π«

1. ВСорСтичСская Ρ‡Π°ΡΡ‚ΡŒ

1.1 ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ массива

1.2 РасполоТСниС Π² ΠΏΠ°ΠΌΡΡ‚ΠΈ

1.3 ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Ρƒ массива

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

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

1.4.2 Π”Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы

1.5 Вип имСни массива

1.6 ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ

1.7 ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ

1.8 Π’ΠΈΠΏ ΠΈ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ указатСля

1.9 ΠŸΡ€Π°Π²ΠΈΠ»Π° опрСдСлСния Ρ‚ΠΈΠΏΠ° ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ

1.10 Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° void

1.11 ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚Π½Ρ‹Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ

1.12 АдрСсная Π°Ρ€ΠΈΡ„ΠΌΠ΅Ρ‚ΠΈΠΊΠ°

1.13 ΠžΠ΄ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ — это ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив

1.14 ΠžΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив — это ΠΎΠ΄ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ

1.15 Π”Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив — это Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ.

1.16 Π”Π²ΠΎΠΉΠ½ΠΎΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ — это Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив

1.17 ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π² ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ΅

1.18 ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅ вопросы.

2. Π›Π°Π±ΠΎΡ€Π°Ρ‚ΠΎΡ€Π½Ρ‹Π΅ задания

2.1 БкалярноС ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅

2.2 Минимакс

2.3 ΠœΠ°ΡΡΠΈΠ²Ρ‹ строк

2.4 Π’Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив

3. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ задания БиблиографичСский список

1. ВСорСтичСская Ρ‡Π°ΡΡ‚ΡŒ

1.1 ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ массива

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅. Массивом называСтся мноТСство элСмСнтов ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, располоТСнных Π² ΠΏΠ°ΠΌΡΡ‚ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄Ρ€ΡƒΠ³ Π·Π° Π΄Ρ€ΡƒΠ³ΠΎΠΌ.

ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΠΈ ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΏΠΎΠ΄ Π½Π΅Π³ΠΎ сразу выдСляСтся ΠΏΠ°ΠΌΡΡ‚ΡŒ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ Π½Π΅ ΠΎΠ± ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½ΠΈΠΈ массива, Π° ΠΎΠ± ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ массива.

Бинтаксис опрСдСлСния массива ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΈΠ΄ Π’ΠΈΠΏ элСмСнта имя массива [n1][n2].. nk];

Π³Π΄Π΅ имя массива — ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, опрСдСляСмый Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΈΠΌΠ΅Π½ΠΈ массива, Π° ni — Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ массива. Массив называСтся k-ΠΌΠ΅Ρ€Π½Ρ‹ΠΌ массивом с ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ Ρ‚ΠΈΠΏΠ° Ρ‚ΠΈΠΏ элСмСнта. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ i-Π³ΠΎ измСрСния ΠΈΠΌΠ΅ΡŽΡ‚ индСксы ΠΎΡ‚ 0 Π΄ΠΎ ni-1. Π’ΠΈΠΏ элСмСнта массива ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΎΡΠ½ΠΎΠ²Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ², Ρ‚ΠΈΠΏΠΎΠΌ указатСля (pointer), Ρ‚ΠΈΠΏΠΎΠΌ структуры (struct) ΠΈΠ»ΠΈ Ρ‚ΠΈΠΏΠΎΠΌ объСдинСния (union). Π₯отя элСмСнты массива Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ функциями, ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ указатСлями Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ массива:

int page[10]; /* ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив ΠΈΠ· 10 элСмСнтов Ρ‚ΠΈΠΏΠ° int, ΠΏΡ€ΠΎΠ½ΡƒΠΌΠ΅Ρ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ с 0 Π΄ΠΎ 9 */

char line[81]; /*массив символов ΠΈΠ»ΠΈ строка, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ 80 символов */

float big[10][10], sales[10][5][8];

1.2 РасполоТСниС Π² ΠΏΠ°ΠΌΡΡ‚ΠΈ

ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π²ΠΈΠ΄ΠΎΠ²:

1. Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅. Π Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Π² ΡΡ‚Π΅ΠΊΠ΅. НапримСр,

main (){

int A[10];

//…

}

2. БтатичСскиС. Π Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Π² ΠΎΠ±Π»Π°ΡΡ‚ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΈ ΡΡ‚атичСских ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. НапримСр,

main (){

static int A[10];

//…

}

3. Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅. Π Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Π² ΠΎΠ±Π»Π°ΡΡ‚ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΈ ΡΡ‚атичСских ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. НапримСр,

int A[10];

main (){

//…

}

4. Π”Π°Π»ΡŒΠ½ΠΈΠ΅ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅. Π Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Π² Π΄Π°Π»ΡŒΠ½Π΅ΠΉ области Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. НапримСр,

far int A[10];

main (){

//…

}

Π”Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Π² ΠΏΠ°ΠΌΡΡ‚ΠΈ ΠΏΠΎ ΡΡ‚Ρ€ΠΎΠΊΠ°ΠΌ. ΠΠ°Ρ‡Π°Π»ΡŒΠ½ΡƒΡŽ строку массива Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½ΡƒΠ»Π΅Π²ΠΎΠΉ строкой.

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

НапримСр, Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив int A[3][4][5] располагаСтся Π² ΠΏΠ°ΠΌΡΡ‚ΠΈ слоями A[0][…][…], …, A[2][…][…].

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ слой, ΠΊΠ°ΠΊ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив, располагаСтся ΠΏΠΎ ΡΡ‚Ρ€ΠΎΠΊΠ°ΠΌ. НапримСр, A[0][0][…], …, A[0][3][…].

ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ сСгмСнта, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΠ±Ρ‰ΠΈΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива Π² Π±Π°ΠΉΡ‚Π°Ρ… Π½Π΅ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ 64К.

1.3 ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Ρƒ массива

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ массива ΠΌΠΎΠ³ΡƒΡ‚ ΡΡ‚ΠΎΡΡ‚ΡŒ Π² ΠΎΠ±Π΅ΠΈΡ… частях ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ присваивания, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Lvalue.

Π—Π°Π΄Π°Π½ΠΈΠ΅ элСмСнта k-ΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива рСализуСтся ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ индСксации:

x[i1][i2].. ik],

Π³Π΄Π΅ ij — Ρ†Π΅Π»ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΏΡ€ΠΈ этом 0<=ij<=nj -1, Π³Π΄Π΅ nj-1 — максимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ j-Π³ΠΎ индСкса массива. НапримСр:

page[5]

line[i+j-1]

big[i][j]

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

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ индСксации являСтся лСвоассоциативной ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ выполняСтся Π² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ слСва Π½Π°ΠΏΡ€Π°Π²ΠΎ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Ρƒ массива Π²Π½Π°Ρ‡Π°Π»Π΅ выполняСтся лСвая опСрация индСксации []. К ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠΌΡƒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρƒ примСняСтся вторая опСрация индСксации [] ΠΈ Ρ‚. Π΄.

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

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ массивов ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΈ Ρ‡Π°ΡΡ‚ΠΈΡ‡Π½ΠΎΠΉ.

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

1. Π’ ΡΠ»ΡƒΡ‡Π°Π΅ ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ указываСтся ΠΏΠΎΠ»Π½Ρ‹ΠΉ список Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобках.

int A[4] = {1, 4, 2, 6};

Π Π°Π·ΠΌΠ΅Ρ€Ρ‹ массивов ΠΏΡ€ΠΈ ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ сам для сСбя ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ эти Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΈ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΉΡ‚ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ sizeof. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ всСго, Ρ‡Ρ‚ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ Π² Π±Π°ΠΉΡ‚Π°Ρ…. Π’ Ρ‡Π°ΡΡ‚ности, sizeof (A) Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива Π² Π±Π°ΠΉΡ‚Π°Ρ…. НапримСр,

int A[] = {1, 4, 2, 6};

int Dim = sizeof (A)/ sizeof (int); // 8/2=4

Π›ΡƒΡ‡ΡˆΠ΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ

int Dim = sizeof (A)/ sizeof (A[0]); // 8/2=4

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

int A[4] = {1, 4};

элСмСнты A[0] ΠΈ A[1] ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ значСния, Π° Π² A[2] ΠΈ A[3] записаны Π½ΡƒΠ»ΠΈ .

Если список ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ большС Ρ€Π°Π·ΠΌΠ΅Ρ€Π° массива, Ρ‚ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ ошибка компиляции.

// int A[4] = {1, 4, 4, 7, 2}; Ошибка

1.4.2 Π”Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы

1. Π’ ΡΠ»ΡƒΡ‡Π°Π΅ ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ указываСтся ΠΏΠΎΠ»Π½Ρ‹ΠΉ список Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобках. КаТдая строка инициализируСтся Π² ΡΠ²ΠΎΠΈΡ… Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобках.

int A[3][4] ={ {1, 4, 2, 6},

{11, 1 4, 1 2, 1 6},

{1, 4, 2, 6}

};

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ количСство строк, ΠΏΡ€ΠΈ ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ.

int A[][4] ={ {1, 4, 2, 6},

{11, 1 4, 1 2, 1 6},

{1, 4, 2, 6}

};

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ сам для сСбя ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ количСство ΠΏΠΎ ΡΠΏΠΈΡΠΊΡƒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΉΡ‚ΠΈ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ sizeof. Π’ Ρ‡Π°ΡΡ‚ности, sizeof (A) Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива Π² Π±Π°ΠΉΡ‚Π°Ρ…, Π° sizeof (A[0]) Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ строки Π² Π±Π°ΠΉΡ‚Π°Ρ…. НапримСр,

int KolStrok = sizeof (A)/ sizeof (A[0]); // 24/82=3

2. Π’ ΡΠ»ΡƒΡ‡Π°Π΅ частичной ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ всС Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ массива ΠΈ Π½Π΅ΠΏΠΎΠ»Π½Ρ‹Π΅ списки Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобках.

int A[4][4] ={ { 2, 6},

{ 1 4, 1 2, 1 6},

{6}

};

Если Ρ€Π°Π·ΠΌΠ΅Ρ€ список ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ большС хотя Π±Ρ‹ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° массива, Ρ‚ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ ошибка компиляции.

// int A[2][4] = {{1, 4, 4, 7, 2},

{1, 4, 4, 2}}; Ошибка

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅. ДопускаСтся инициализация Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ°Ρ€ΠΎΠΉ Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобок

int A[2][4] = { 1, 4, 4, 7, 2, 1, 4, 4, 2};

Но Ρ‚Π°ΠΊΠΎΠΉ способ Ρ‡Ρ€Π΅Π²Π°Ρ‚ логичСской ошибкой Π² ΡΠ»ΡƒΡ‡Π°Π΅ частичной ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅. ΠŸΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ массива Π±Π΅Π· ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ всС Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ Π½Π°Π΄ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ явным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

1.5 Вип имСни массива

Для ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов Ρ‚ΠΈΠΏΠΎΠΌ ΠΈΠΌΠ΅Π½ΠΈ массива являСтся Ρ‚ΠΈΠΏ_элСмСнта_массива[]

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

Имя, А ΠΌΠ°ΡΡΠΈΠ²Π° char A[20]; ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ char[].

Имя Π’ ΠΌΠ°ΡΡΠΈΠ²Π° float B[10] ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ float[].

Для Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов Ρ‚ΠΈΠΏΠΎΠΌ ΠΈΠΌΠ΅Π½ΠΈ массива являСтся Ρ‚ΠΈΠΏ_элСмСнта_массива[][Ρ€Π°Π·ΠΌΠ΅Ρ€].

Π’ Ρ‚ΠΈΠΏΠ΅ ΠΈΠΌΠ΅Π½ΠΈ массива Π½Π΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€Π΅ массива — ΠΎ ΠΊΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²Π΅ строк.

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

Имя, А ΠΌΠ°ΡΡΠΈΠ²Π° char A[10][20]; ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ char[][20].

Имя B ΠΌΠ°ΡΡΠΈΠ²Π° char B[100][20] Ρ‚ΠΎΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ char[][20].

Имя C ΠΌΠ°ΡΡΠΈΠ²Π° char C[20][10] ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ char[][10], ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΎΡ‚ Ρ‚ΠΈΠΏΠΎΠ², А ΠΈ Π’.

1.6 ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ

ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива Π² ΡΠΏΠΈΡΠΊΠ΅ фактичСских Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ имя массива ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива. Π’ ΠΈΠΌΠ΅Π½ΠΈ массива Π½Π΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π΅ массива. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ массива ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΈΠΏ элСмСнтов массива ΠΈ Π°Π΄Ρ€Π΅Ρ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ элСмСнта массива.

Π’ ΡΠΏΠΈΡΠΊΠ΅ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΈΠΏΡ‹. Π”ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива бСсполСзно.

ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΏΠΎ Π°Π΄Ρ€Π΅ΡΡƒ. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ функция Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΠΎΠΌ массива ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Π΅Π³ΠΎ элСмСнты. Π­Ρ‚ΠΎ Ρ„Π°ΠΊΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для возвращСния массивов ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° return массив Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ нСльзя.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΎΠ²

1. int max (int *A, int Dim);

МоТно Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ

int max (int A[], int Dim);

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ запись логичСски Π½Π΅ Π²Π΅Ρ€Π½Π°, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива Π½Π΅ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² Ρ‚ΠΈΠΏ ΠΈΠΌΠ΅Π½ΠΈ массива.

// int max (int A[100]); ошибка Π’ ΡΠΏΠΈΡΠΊΠ΅ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² записи int *A ΠΈ int A[] Ρ€Π°Π²Π½ΠΎΡΠΈΠ»ΡŒΠ½Ρ‹.

2. float scal (float A[], float B[], int Dim);

ΠŸΡ€ΠΈΠΌΠ΅Ρ€. Ѐункция Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ сумму элСмСнтов ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива Ρ‚ΠΈΠΏΠ° int ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ.

int sum (int *A, int Dim); // ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

int sum (int *A, int Dim)

{

int S =0;

for (int i = 0; i < Dim; i++)

S += A[i];

return S;

}

void main ()

{

int B[] = {1,2,3,4,5};

int N = sizeof (B)/sizeof (B[0]);

printf («nΠ‘ΡƒΠΌΠΌΠ° элСмСнтов Ρ€Π°Π²Π½Π° %d», sum (B, N));

}

ΠŸΡ€ΠΈΠΌΠ΅Ρ€. Ѐункция Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ всС Ρ‡Π΅Ρ‚Π½Ρ‹Π΅ элСмСнты Π² ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠΌ массивС.

int VseChot (int A[], int DimA, int Chot[], int DimChot);

Ѐункция Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ Ρ‡Π΅Ρ‚Π½Ρ‹Π΅ элСмСнты массива, А ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ ΠΈΡ… Π² ΠΌΠ°ΡΡΠΈΠ² Chot. ΠŸΡ€ΠΈ этом Π½Π°Π΄ΠΎ ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ количСство Ρ‡Π΅Ρ‚Π½Ρ‹Ρ… элСмСнтов Π½Π΅ ΠΏΡ€Π΅Π²Ρ‹ΡΠΈΠ»ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ DimChot массива Chot. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ количСство Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹Ρ… Ρ‡Π΅Ρ‚Π½Ρ‹Ρ… элСмСнтов. Если количСство Ρ‡Π΅Ρ‚Π½Ρ‹Ρ… элСмСнтов прСвысило Ρ€Π°Π·ΠΌΠ΅Ρ€ DimChot, Ρ‚ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ся -1, Π° ΠΌΠ°ΡΡΠΈΠ² Chot ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ состоит ΠΈΠ· Ρ‡Π΅Ρ‚Π½Ρ‹Ρ… элСмСнтов массива А.

int VseChot (int A[], int DimA, int Chot[], int DimChot)

{

int count = 0;

for (int i = 0; i < DimA; i++)

if (A[i] % 2 == 0) //Ρ‡Π΅Ρ‚Π½ΠΎΠ΅ число

if (count < DimChot)

Chot[count++] = A[i];

else

return -1;

}

void main ()

{

int A[]={1, 2, 4, 6, 7, 5};

int B[4];

int res = VseChot (A, 6, B, 4);

if (res = -1)

{

printf («n ΠΠ°ΠΉΠ΄Π΅Π½Ρ‹ Π½Π΅ Π²ΡΠ΅ Ρ‡Π΅Ρ‚Π½Ρ‹Π΅ элСмСнты массива:»);

for (int I = 0; I < 4; i++)

printf («%d «, B[i]);

}

else

{

printf («n ΠŸΠ΅Ρ€Π΅Ρ‡Π΅Π½ΡŒ Ρ‡Π΅Ρ‚Π½Ρ‹Ρ… элСмСнтов массива :»);

for (i = 0; i < 4; i++)

printf («%d «, B[i]);

}

}

1.7 ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ

Π’ ΡΠ»ΡƒΡ‡Π°Π΅ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов Π½ΡƒΠΆΠ½ΠΎ Ρ‚ΠΎΡ‡Π½ΠΎ ΡΠΎΠ±Π»ΡŽΠ΄Π°Ρ‚ΡŒ совпадСниС Ρ‚ΠΈΠΏΠΎΠ² фактичСских ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

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

1. Ѐункция Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ элСмСнт Π² ΠΌΠ°ΡΡΠΈΠ²Π΅

int max (int A[][100], int KolStroc, int KolStolb);

Данная функция ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для массивов, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²Ρ‚ΠΎΡ€ΠΎΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ 100. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС, Π±ΡƒΠ΄Π΅Ρ‚ ошибка компиляции.

НапримСр, ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для частично ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ массива

int A[][100] = {{1,3,5}, {15,2,3}};

int res = max (A, 2, 3);

2. Ѐункция Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ сумму элСмСнтов Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива здСсь использовано явноС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива ΠΊ Ρ‚ΠΈΠΏΡƒ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива. Π­Ρ‚ΠΎ позволяСт Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для Π»ΡŽΠ±Ρ‹Ρ… Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов.

int sum (int A[], int KolStroc, int KolStolb)

{

int s= 0;

for (int i = 0; i < KolStroc; i++)

for (int j = 0; j < KolSolb; j++)

s += A[i* KolSolb + j];

return s;

};

void main ()

{

int B[2][3]={{1,4,2}, {4,1,2}};

int res = sum ((int *)A, 2, 3);

printf («%d», s);

}

1.8 Π’ΠΈΠΏ ΠΈ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ указатСля

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅. Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ называСтся пСрСмСнная, объявлСнная ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ

type *имя_указатСля;

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅. Π’ΠΈΠΏΠΎΠΌ указатСля называСтся type*.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅. Π‘Π°Π·ΠΎΠ²Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ указатСля называСтся Ρ‚ΠΈΠΏ type Π΄Π°Π½Π½ΠΎΠ³ΠΎ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ.

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

1. ΠžΠ΄ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ int *pi ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ int* ΠΈ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ int.

2. ΠžΠ΄ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ struct date *pd ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ date* ΠΈ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ date.

3. Π”Π²ΠΎΠΉΠ½ΠΎΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ float **ppf ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ float** ΠΈ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ float*.

4. Π Π΅Π΄ΠΊΠΈΠΉ Ρ‚Ρ€ΠΎΠΉΠ½ΠΎΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ char ***pppc ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ char *** ΠΈ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ char **.

НаиболСС часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΎΠ΄ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ ΠΈ Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ, ΠΊΡ€Π°ΠΉΠ½Π΅ Ρ€Π΅Π΄ΠΊΠΎ Ρ‚Ρ€ΠΎΠΉΠ½Ρ‹Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ. Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ с 4 Π·Π²Π΅Π·Π΄ΠΎΡ‡ΠΊΠ°ΠΌΠΈ — ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½ΠΎΠΉ ситуации.

1.9 ΠŸΡ€Π°Π²ΠΈΠ»Π° опрСдСлСния Ρ‚ΠΈΠΏΠ° ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ

Β· ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊ Π»ΡŽΠ±ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ name ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ взятия адрСса &name добавляСт ΠΊ Ρ‚ΠΈΠΏΡƒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° ΠΎΠ΄Π½Ρƒ *.

Β· ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊ Π»ΡŽΠ±ΠΎΠΌΡƒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ ptr ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ разымСнования *ptr удаляСт ΠΈΠ· Ρ‚ΠΈΠΏΠ° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° ΠΎΠ΄Π½Ρƒ *.

Β· ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊ Π»ΡŽΠ±ΠΎΠΌΡƒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ ptr ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ индСксации ptr[0] удаляСт ΠΈΠ· Ρ‚ΠΈΠΏΠ° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° ΠΎΠ΄Π½Ρƒ *.

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

int **ptr; // Ρ‚ΠΈΠΏ ptr — это int **

// Ρ‚ΠΈΠΏ *ptr — это int *

// Ρ‚ΠΈΠΏ **ptr — это int

// Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ***ptr ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½ΠΎ

// Ρ‚ΠΈΠΏ ptr[0] - это int *

// Ρ‚ΠΈΠΏ ptr[3][5] - это int

// Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ptr[1][1][1] ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½ΠΎ

// Ρ‚ΠΈΠΏ *ptr[0] - это int

// Ρ‚ΠΈΠΏ &(*ptr[0]) — это int*

1.10 Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° void

Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Ρ‚ΠΈΠΏΠ° void * Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΈ Π΄Π»Ρ дальнСйшСй Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½ΠΈΠΌ ΠΊ Π½Π΅ΠΌΡƒ Π½Π°Π΄ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ явного прСобразования Ρ‚ΠΈΠΏΠ°.

Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Ρ‚ΠΈΠΏΠ° void * ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Π²ΡΠ΅, Ρ‡Ρ‚ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ. ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠΌΡƒ слову void здСсь приписываСтся Π½Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ «Π½ΠΈΡ‡Π΅Π³ΠΎ», Π° ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ «Π²ΡΠ΅, Ρ‡Ρ‚ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ». Под слово void ΠΏΠΎΠ΄ΠΏΠ°Π΄Π°ΡŽΡ‚ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹, Π»ΡŽΠ±Ρ‹Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ: ΠΎΠ΄ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅, Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅ ΠΈ Ρ‚. Π΄.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, объявлСниС void **ptr Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ смысла, хотя ΠΈ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ²Π»ΡΡ‚ΡŒΡΡ логичСской ошибкой. Надо ΠΏΠΈΡΠ°Ρ‚ΡŒ void *ptr.

Π’ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡΡ… присваивания ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° void ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚ΠΎΡΡ‚ΡŒ Π² Π»Π΅Π²ΠΎΠΉ части. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ void* ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ любой ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ. ΠŸΡ€ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΈ указатСля void* Π² ΠΏΡ€Π°Π²ΠΎΠΉ части Π΅Π³ΠΎ Π½Π°Π΄ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΊ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ Π»Π΅Π²ΠΎΠΉ части. НапримСр.

int i=5, *pi = &i;

void *ptr;

ptr = pi;

//pi = ptr; ошибка

pi = (int *)ptr; // ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ

1.11 ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚Π½Ρ‹Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ

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

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

int *Arr = {1,3,2,4,5}, *B = {1,1};

ΠŸΡ€ΠΈ Π΄Π°Π½Π½ΠΎΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ допустимы ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π΄Π²Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°

Arr[0]=100;

Arr = B;

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

const int *Arr = {1,3,2,4,5}, *B = {1,1};

// Arr[0]=100; ошибка

Arr = B;

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

int *const Arr = {1,3,2,4,5}, *B = {1,1};

Arr[0]=100;

//Arr = B; ошибка ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 4.

const int *const Arr = {1,3,2,4,5}, *B = {1,1};

//Arr[0]=100; ошибка

//Arr = B; ошибка ΠžΠ±Ρ‹Ρ‡Π½ΠΎ константныС ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ для строк

const char* str = «Hello»;

Π’ ΡΡ‚ΠΎΠΌ случаС защищаСтся содСрТимоС тСкстовых строк.

1.12 АдрСсная Π°Ρ€ΠΈΡ„ΠΌΠ΅Ρ‚ΠΈΠΊΠ°

ΠŸΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅. Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ адрСс ΠΈΠ»ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Ρ‚ΠΈΠΏΠ°. Если всС ΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ адрСса Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ², Ρ‚ΠΎ Π½Π°Π΄ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ явного прСобразования Ρ‚ΠΈΠΏΠ°. Для ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ нСявноС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.

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

1. int *A = (int *)malloc (20);

2. int **A; char *c; A = (int **)c;

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ разымСнования * Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, хранящССся Π² ΡΡ‡Π΅ΠΉΠΊΠ΅ ΠΏΠΎ Π°Π΄Ρ€Π΅ΡΡƒ, содСрТащСмуся Π² ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅.

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

int i = 5, *pi = &i;

*pi = 10;// i =10

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ адрСса указатСля. Подобно Π»ΡŽΠ±Ρ‹ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ, пСрСмСнная Ρ‚ΠΈΠΏΠ° ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΈΠΌΠ΅Π΅Ρ‚ адрСс ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ & сообщаСт Π½Π°ΠΌ, Π³Π΄Π΅ находится сам ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ.

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ & добавляСт ΠΊ Ρ‚ΠΈΠΏΡƒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° ΠΎΠ΄Π½Ρƒ *.

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

int n=20, *pn = &n, **ppn;

ppn = &pn;

Π£Π²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ указатСля. К ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ ptr ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΈ Π²Ρ‹Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ любоС Ρ†Π΅Π»ΠΎΠ΅ число n. ΠŸΡ€ΠΈ этом ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ измСняСтся Π½Π° ΠΊΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Π±Π°ΠΉΡ‚ Ρ€Π°Π²Π½ΠΎΠ΅ n, ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½Π½ΠΎΠΌΡƒ Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ Π² Π±Π°ΠΉΡ‚Π°Ρ… Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° указатСля ptr.

БоотвСтствСнно, ΠΊ ΡƒΠΊΠ°Π·Π°Ρ‚Слям ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π° ++ ΠΈ Π΄Π΅ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π° —.

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

int n=20, *pn = &n, **ppn;

pn = pn + 5;

// Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ pn — int, Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ 2 Π±Π°ΠΉΡ‚Π°, поэтому pn ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ся Π½Π° 10 Π±Π°ΠΉΡ‚.

ppn = &pn+5;

// Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ выраТСния &pn — int*, Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ 4 Π±Π°ΠΉΡ‚Π° для ΠΌΠΎΠ΄Π΅Π»ΠΈ large, поэтому pn ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ся Π½Π° 20 Π±Π°ΠΉΡ‚.

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° Ρ€Π°Π²Π΅Π½ΡΡ‚Π²ΠΎ ΠΈ Π½Π΅Ρ€Π°Π²Π΅Π½ΡΡ‚Π²ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ ΡƒΠΊΠ°Π·Π°Ρ‚Слям ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°.

Π Π°Π·Π½ΠΎΡΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ. МоТно Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ€Π°Π·Π½ΠΎΡΡ‚ΡŒ Π΄Π²ΡƒΡ… ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ являСтся количСство элСмСнтов Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, находящимися ΠΌΠ΅ΠΆΠ΄Ρƒ этими указатСлями. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ int для Π±Π»ΠΈΠΆΠ½ΠΈΡ… ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΈ Ρ‚ΠΈΠΏ long для Π΄Π°Π»ΡŒΠ½ΠΈΡ… ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ.

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

int A[10];

int *px = &A[1], *py = &A[9];

int n;

n = (int)(py — px); // n = 8

1.13 ΠžΠ΄ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ — это ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив

ΠžΠ΄ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΊ Π½Π΅ΠΌΡƒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ индСксации.

int n=10, *pi;

pi = &i;

Π’ΠΎΠ³Π΄Π° pi[0] - это пСрСмСнная i,. pi[1] - это пСрСмСнная Ρ‚ΠΈΠΏΠ° int, располоТСнная справа ΠΎΡ‚ i, pi[-1] - это пСрСмСнная Ρ‚ΠΈΠΏΠ° int, располоТСнная слСва ΠΎΡ‚ i.

1.14 ΠžΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив — это ΠΎΠ΄ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ

Имя ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива, взятоС само ΠΏΠΎ ΡΠ΅Π±Π΅, являСтся константным ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π° Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ элСмСнт этого массива. К ΠΈΠΌΠ΅Π½ΠΈ массива ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π°Ρ€ΠΈΡ„ΠΌΠ΅Ρ‚ΠΈΠΊΠΈ, Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΠ΅ содСрТимоС указатСля.

int A[5];

Π’ΠΈΠΏ, А — это int *, Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ — int.

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, А ΡΠ²Π»ΡΠ΅Ρ‚ся адрСсом элСмСнта A[0], поэтому *A — это Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ элСмСнт массива А.

А+1 — это адрСс элСмСнта A[1], Π° Ρ€Π°Π·Ρ‹ΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ *(А+1) — это A[1], *(А+4) — это послСдний элСмСнт A[4], использованиС выраТСния *(А+5) Π² Π»ΡŽΠ±ΠΎΠΉ части ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ присваивания являСтся логичСской ошибкой Π²Ρ‹Ρ…ΠΎΠ΄Π° индСкса массива Π·Π° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½.

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅. БущСствСнноС Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΈ ΠΈΠΌΠ΅Π½Π΅ΠΌ массива состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ являСтся ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Π΅ΠΌΠΎΠΉ Π² ΠžΠ—Π£. Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ сам ΠΈΠΌΠ΅Π΅Ρ‚ адрСс ΠΈ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ 2 ΠΈΠ»ΠΈ 4 Π±Π°ΠΉΡ‚Π° Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π±Π»ΠΈΠΆΠ½ΠΈΠΉ это ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΈΠ»ΠΈ дальний. Имя массива являСтся адрСсной константой, Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ адрСса ΠΈ Π½Π΅ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ мСста Π² ΠžΠ—Π£.

1.15 Π”Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив — это Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ

Рассмотрим ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива

int A[3][5];

Массив ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Ρ€ΠΈ строки ΠΏΠΎ ΠΏΡΡ‚ΡŒ элСмСнтов Ρ‚ΠΈΠΏΠ° int. ΠŸΡ€ΠΈ этом A[0] - это Π½Π°Ρ‡Π°Π»ΡŒΠ½Π°Ρ, строка ΠΈΠ· 5 элСмСнтов Ρ‚ΠΈΠΏΠ° int, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив ΠΈΠ· 5 элСмСнтов Ρ‚ΠΈΠΏΠ° int. Но Ρ‚ΠΈΠΏ ΠΈΠΌΠ΅Π½ΠΈ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива Π½Π΅ ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° этого массива. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ρ‚ΠΈΠΏ указатСля A[0] - это int*, Π° Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ int.

БоотвСтствСнно, А[1] - это пСрвая строка массива, Ρ‚ΠΈΠΏ А[1] - это int*. ЀактичСски A[0] - это адрСс Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ элСмСнта Π½ΡƒΠ»Π΅Π²ΠΎΠΉ строки, A[1] - это адрСс Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ элСмСнта ΠΏΠ΅Ρ€Π²ΠΎΠΉ строки ΠΈ Ρ‚. Π΄.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‚ΠΈΠΏ A[0] Π½Π΅ ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° 5.

Рассмотрим имя Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива А, взятоС само ΠΏΠΎ ΡΠ΅Π±Π΅. Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, А — это адрСс Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ строки ΠΈΠ· 5 элСмСнтов Ρ‚ΠΈΠΏΠ° int. Π’ΠΈΠΏ, А — это int (*)[5]. Π’ Π΄Π°Π½Π½ΠΎΠΌ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ ΡƒΡ‡Π°ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‚Ρ€ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ: ΠΊΡ€ΡƒΠ³Π»Ρ‹Π΅ скобки (), индСксация [] ΠΈ Ρ€Π°Π·Ρ‹ΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅*. ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ здСсь ΠΈΠ΄Π΅Ρ‚ ΠΏΠΎ ΡƒΠ±Ρ‹Π²Π°Π½ΠΈΡŽ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π°. Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ int (*)[5] Π½ΡƒΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΌΠ°ΡΡΠΈΠ² ΠΈΠ· ΠΏΡΡ‚ΠΈ элСмСнтов Ρ‚ΠΈΠΏΠ° int.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‚ΠΈΠΏ указатСля, А ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ количСство столбцов. ΠžΡ‚ΡΡŽΠ΄Π° Π²Ρ‹Ρ‚Π΅ΠΊΠ°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π΄Π²Π° массива

int B[10][5], C[3][20];

ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹. Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π’ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ‚ΠΈΠΏ int (*)[5], Π° ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π‘ ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚ΠΈΠΏ int (*)[20].

Π”Π°Π»Π΅Π΅, ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ ΠΊ Π΄Π²ΠΎΠΉΠ½ΠΎΠΌΡƒ константному ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ, А ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ.

A+1 — это адрСс ΠΏΠ΅Ρ€Π²ΠΎΠΉ строки ΠΈΠ· 5 элСмСнтов Ρ‚ΠΈΠΏΠ° int. Π’ΠΈΠΏ A+1 — это int (*)[5], Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ — ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив ΠΈΠ· ΠΏΡΡ‚ΠΈ элСмСнтов Ρ‚ΠΈΠΏΠ° int, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ int*.

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ случаС, A+i это адрСс i-ΠΎΠΉ строки ΠΈΠ· 5 элСмСнтов Ρ‚ΠΈΠΏΠ° int. Π’ΠΈΠΏ A+i — это int (*)[5], Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ — ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив ΠΈΠ· ΠΏΡΡ‚ΠΈ элСмСнтов Ρ‚ΠΈΠΏΠ° int, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ int*.

*(A+i) — это сама i-ая строка ΠΈΠ· 5 элСмСнтов Ρ‚ΠΈΠΏΠ° int, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ адрСс Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ элСмСнта ΠΏΠ΅Ρ€Π²ΠΎΠΉ строки. Π’ΠΈΠΏ *(A+i) — это int*, Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ *(A+i) — это int.

*(A+i) + j — это адрСс j-Π³ΠΎ элСмСнта i-ΠΎΠΉ строки. Π’ΠΈΠΏ *(A+i) + j — это int*, Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ int.

*(*(A+i) + j) — это сам j-ΠΉ элСмСнт i-ΠΎΠΉ строки. Π’ΠΈΠΏ *(*(A+i) + j) — int

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, двойная индСксация A[i][j] Ρ€Π°Π²Π½ΠΎΡΠΈΠ»ΡŒΠ½Π° записи

*(*(A+i) + j).

1.16 Π”Π²ΠΎΠΉΠ½ΠΎΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ — это Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив

Π”Π²ΠΎΠΉΠ½Ρ‹Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π΅ Ρ‚Π°ΠΊ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€. Рассмотрим Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ

int n=5;

int* pi = &n;

int **ppi = Ο€

ΠŸΠΎΡΡ‚Ρ€ΠΎΠΈΠΌ схСму ΠžΠ—Π£ для всСх Ρ‚Ρ€Π΅Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…

Рис. 1.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€

ppi[1][1] = 10;

синтаксичСски ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ, Π½ΠΎ Π»ΠΎΠ³ΠΈΡ‡Π΅ΡΠΊΠΈ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π΅Π½. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС число 10 записано Π² Π½Π°ΡƒΠ³Π°Π΄ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ ячСйкС ΠžΠ—Π£, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ врСмя ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΊ Ρ„Π°Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΌ ошибкам.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€

ppi[0][1] = 20;

Ρ‚Π°ΠΊΠΆΠ΅ синтаксичСски ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ, Π½ΠΎ Π»ΠΎΠ³ΠΈΡ‡Π΅ΡΠΊΠΈ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π΅Π½.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€. Рассмотрим массив строк

char *Arr[] = {"Hello", ««, «World!"};

Π’ ΡΠΎΠΎΡ‚вСтствии с ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Ρ‚ΠΈΠΏ Arr — это char*[], Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ массив Ρ‚ΠΈΠΏΠΎΠ² char*, Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами массив строк. Но ΡΡ‚Ρ€ΠΎΠΊΠ° — это ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив элСмСнтов Ρ‚ΠΈΠΏΠ° char, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ‚ΠΈΠΏ строки — это char*. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ρ‚ΠΈΠΏ Arr — это Ρ‚Π°ΠΊΠΆΠ΅ ΠΈ char**. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΡ‹ ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΈ, Ρ‡Ρ‚ΠΎ Arr — Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ.

1.17 ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π² ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ΅

Для указатСля ptri, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ

int i = 4, *ptri;

ptri = &i;

ΠΎΠΊΠ½ΠΎ просмотра Π² ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ΅ ΠΏΠΎ Alt-F4 ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΈΠ΄ Π’Π°Π±Π»ΠΈΡ†Π°.1.

8FAC:FFF2

ΠΏ

Ds:FFF4

[0]

4(0×0004)

int *

Π—Π΄Π΅ΡΡŒ ΡƒΠΊΠ°Π·Π°Π½Ρ‹:

Β· адрСс самой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ptri, Ρ€Π°Π²Π½Ρ‹ΠΉ 8FAC: FFF2;

Β· Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ этой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ds: FFF4;

Β· Π° Ρ‚Π°ΠΊΠΆΠ΅ содСрТимоС ячСйки ΠΏΠΎ Π°Π΄Ρ€Π΅ΡΡƒ Ds: FFF4, Ρ‚. Π΅. Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ i.

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ содСрТимоС ячССк, ΠΎΠΊΡ€ΡƒΠΆΠ°ΡŽΡ‰ΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ i, Π½ΡƒΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠ΅ΠΉ клавиш Alt-I, ввСсти Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ индСкс (Starting index) ΠΈ Ρ‡ΠΈΡΠ»ΠΎ ячССк (Count). Если, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Π²Π΅Π΄Π΅Π½Ρ‹ числа -5 ΠΈ 15, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΎΠΊΠ½Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ элСмСнты массива

ptri[-5], ptri[-4],…, ptri[10].

1.18 ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅ вопросы

1. Как ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива?

2. КакиС Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Ρƒ ΠΌΠ°ΡΡΠΈΠ²Π° ΠΏΡ€ΠΈ Π΅Π³ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ?

3. НарисуйтС схСму ΠžΠ—Π£ ΠΏΡ€ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ Π·Π° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ массива int A[3][4] Π² ΡΠ»ΡƒΡ‡Π°Π΅ логичСской ошибкС A[3][4] = 0;

4. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ смСщСниС Π² Π±Π°ΠΉΡ‚Π°Ρ… элСмСнта A[i][j] ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π°Ρ‡Π°Π»Π° массива float A[4][5].

5. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ находится сумма элСмСнтов ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ строки ΠΈ ΡΡ‚ΠΎΠ»Π±Ρ†Π° ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ A[m][n].

6. ΠžΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅

char c;

int *pi;

float **ppf;

Π£ΠΊΠ°ΠΆΠΈΡ‚Π΅ Ρ‚ΠΈΠΏΡ‹ ΠΈ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, Ссли ΠΎΠ½ΠΈ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚

&c, *(&c), &pi[0], &(p+10), &&ppf, ppf[10], (*ppf)[3]

7. Π˜ΠΌΠ΅Π΅Ρ‚ΡΡ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ

int n=5, m=20;

int *const pi = &n;

КакиС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ синтаксичСски Π½Π΅Π²Π΅Ρ€Π½Ρ‹

*pi = 10;

pi = &m;

*pi++;

(*pi)++;

2. Π›Π°Π±ΠΎΡ€Π°Ρ‚ΠΎΡ€Π½Ρ‹Π΅ задания

2.1 БкалярноС ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅

ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ скалярноС ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π΄Π²ΡƒΡ… Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ².

2.2 Минимакс

Π”Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ находят построчный минимакс ΠΈ ΠΏΠΎΡΡ‚Ρ€ΠΎΡ‡Π½Ρ‹ΠΉ максимин элСмСнтов ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Ρ†Π΅Π»Ρ‹Ρ… чисСл. Под построчным минимаксом понимаСтся минимальноС ΠΈΠ· ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… элСмСнтов Π²ΠΎ Π²ΡΠ΅Ρ… строках ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹.

2.3 ΠœΠ°ΡΡΠΈΠ²Ρ‹ строк

ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ массив строк Π² ΠΎΠ΄Π½Ρƒ строку, Π° Ρ‚Π°ΠΊΠΆΠ΅ тСст этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

2.4 Π’Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив

НайдитС сумму элСмСнтов Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π°Ρ€ΠΈΡ„ΠΌΠ΅Ρ‚ΠΈΠΊΠΈ.

3. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ задания

1. ΠΠ°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая добавляСт строку ΠΊ ΠΌΠ°ΡΡΠΈΠ²Ρƒ строк.

2. ΠΠ°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ Π² Ρ‚Скст Π΄Π΅Π½Π΅ΠΆΠ½ΡƒΡŽ сумму.

БиблиографичСский список

1. ΠšΠ΅Ρ€Π½ΠΈΠ³Π°Π½ Π‘. Π―Π·Ρ‹ΠΊ программирования Π‘ΠΈ / Π‘. ΠšΠ΅Ρ€Π½ΠΈΠ³Π°Π½, Π”. Π ΠΈΡ‚Ρ‡ΠΈ. БПб.: НСвский Π΄ΠΈΠ°Π»Π΅ΠΊΡ‚, 2001. 352 с.

2. ПодбСльский Π’. Π’. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ Π‘ΠΈ / Π’. Π’. ПодбСльский, Π‘. Π‘. Π€ΠΎΠΌΠΈΠ½. М.: Ѐинансы ΠΈ ΡΡ‚атистика, 2004. 600 с.

3. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Π‘ΠΈ. ΠžΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°: ΠΌΠ΅Ρ‚ΠΎΠ΄ указания / сост. Π‘. П. Π’Ρ€ΠΎΡ„ΠΈΠΌΠΎΠ². Π•ΠΊΠ°Ρ‚Π΅Ρ€ΠΈΠ½Π±ΡƒΡ€Π³: Π£Π“Π’Π£, 1998. 14 с.

4. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Π‘ΠΈ. ДинамичСскоС распрСдСлСниС памяти: ΠΌΠ΅Ρ‚ΠΎΠ΄. указания / сост. Π‘. П. Π’Ρ€ΠΎΡ„ΠΈΠΌΠΎΠ². Π•ΠΊΠ°Ρ‚Π΅Ρ€ΠΈΠ½Π±ΡƒΡ€Π³: Π£Π“Π’Π£, 1998. 13 с.

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ