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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π―Π·Ρ‹ΠΊ программирования Π‘ΠΈ. ИзданиС 3-Π΅, исправлСнноС». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 32

Автор Π‘Ρ€Π°ΠΉΠ°Π½ ΠšΠ΅Ρ€Π½ΠΈΠ³Π°Π½

int *daytab[13]

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

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 5.8. Π’ функциях day_of_year ΠΈ month_day Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π²Π²ΠΎΠ΄ΠΈΠΌΡ‹Ρ… Π΄Π°Ρ‚. УстранитС этот нСдостаток.

5.8 Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ массивов ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ

НапишСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ month_name(n), которая Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° строку символов, содСрТащий Π½Π°Π·Π²Π°Π½ΠΈΠ΅ n-Π³ΠΎ мСсяца. Π­Ρ‚Π° функция идСальна для дСмонстрации использования статичСского массива. Ѐункция month_name ΠΈΠΌΠ΅Π΅Ρ‚ Π² своСм Π»ΠΈΡ‡Π½ΠΎΠΌ распоряТСнии массив строк, Π½Π° ΠΎΠ΄Π½Ρƒ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ½Π° ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ. НиТС ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ, ΠΊΠ°ΠΊ инициализируСтся этот массив ΠΈΠΌΠ΅Π½.

Бинтаксис задания Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π΅Π½ синтаксису ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ:

/* month_name: Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ имя n-Π³ΠΎ мСсяца */

char *month_name(int n)

{

 static char *name[] = {

  "НСвСрный мСсяц",

  "Π―Π½Π²Π°Ρ€ΡŒ","Π€Π΅Π²Ρ€Π°Π»ΡŒ","ΠœΠ°Ρ€Ρ‚","ΠΠΏΡ€Π΅Π»ΡŒ","Май","Июнь",

  "Июль","Август","Π‘Π΅Π½Ρ‚ΡΠ±Ρ€ΡŒ","ΠžΠΊΡ‚ΡΠ±Ρ€ΡŒ","ΠΠΎΡΠ±Ρ€ΡŒ","Π”Π΅ΠΊΠ°Π±Ρ€ΡŒ"

 };

 return (n β€Ή 1 || n β€Ί 12) ? name[0] : name[n];

}

ОбъявлСниС name массивом ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° символы Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ объявлСниС lineptr Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ сортировки. Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠΌ слуТит список строк, ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… соотвСтствуСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ мСсто Π² массивС. Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ‹ i-ΠΉ строки Π³Π΄Π΅-Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Ρ‹, ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π½ΠΈΡ… запоминаСтся Π² name[i]. Π’Π°ΠΊ ΠΊΠ°ΠΊ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива name Π½Π΅ спСцифицирован, компилятор вычислит Π΅Π³ΠΎ ΠΏΠΎ количСству Π·Π°Π΄Π°Π½Π½Ρ‹Ρ… Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.

5.9 Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ ΠΏΡ€ΠΎΡ‚ΠΈΠ² ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов

ΠΠ°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° Π‘ΠΈ ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡŽΡ‚, Π² Ρ‡Π΅ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΌ массивом ΠΈ массивом ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π²Ρ€ΠΎΠ΄Π΅ name ΠΈΠ· ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°. Для Π΄Π²ΡƒΡ… ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ:

int a[10][20];

int *b[10];

записи a[3][4] ΠΈ b[3][4] Π±ΡƒΠ΄ΡƒΡ‚ синтаксичСски ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ΠΌ ΠΊ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ Ρ‚ΠΈΠΏΠ° int. Однако Ρ‚ΠΎΠ»ΡŒΠΊΠΎ a являСтся истинно Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΌ массивом: для двухсот элСмСнтов Ρ‚ΠΈΠΏΠ° int Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π° ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π° вычислСниС смСщСния элСмСнта a[строка][столбСц] ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π° массива Π±ΡƒΠ΄Π΅Ρ‚ Π²Π΅ΡΡ‚ΠΈΡΡŒ ΠΏΠΎ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π΅ 20 * строка + столбСц, ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ Π΅Π³ΠΎ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΡƒΡŽ ΠΏΡ€ΠΈΡ€ΠΎΠ΄Ρƒ. Для b ΠΆΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 10 ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Π±Π΅Π· ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Π° Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒΡΡ явно -Π»ΠΈΠ±ΠΎ статичСски, Π»ΠΈΠ±ΠΎ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт b ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° двадцатиэлСмСнтный массив, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π³Π΄Π΅-Ρ‚ΠΎ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π΄Π΅Π»Π΅Π½Ρ‹ пространство, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ размСстятся 200 Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Ρ‚ΠΈΠΏΠ° int, ΠΈ Π΅Ρ‰Π΅ 10 ячССк для ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ. Π’Π°ΠΆΠ½ΠΎΠ΅ прСимущСство массива ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ строки Ρ‚Π°ΠΊΠΎΠ³ΠΎ массива ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ Π΄Π»ΠΈΠ½Ρ‹. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт массива b Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° двадцатиэлСмСнтный Π²Π΅ΠΊΡ‚ΠΎΡ€; ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° Π΄Π²Π° элСмСнта, Π΄Ρ€ΡƒΠ³ΠΎΠΉ - Π½Π° ΠΏΡΡ‚ΡŒΠ΄Π΅ΡΡΡ‚, Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈ вовсС ΠΌΠΎΠ³ΡƒΡ‚ Π½ΠΈ Π½Π° Ρ‡Ρ‚ΠΎ Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ.

Наши рассуТдСния здСсь касались Ρ†Π΅Π»Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΎΠ΄Π½Π°ΠΊΠΎ Ρ‡Π°Ρ‰Π΅ массивы ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ со строками символов, Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‰ΠΈΠΌΠΈΡΡ ΠΏΠΎ Π΄Π»ΠΈΠ½Π΅, ΠΊΠ°ΠΊ это Π±Ρ‹Π»ΠΎ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ month_name. Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ массива ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π΅ΠΌΡƒ рисунок:

char *name[] = {"ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ мСсяц", "Π―Π½Π²", "Π€Π΅Π²Ρ€", "ΠœΠ°Ρ€Ρ‚"};

с объявлСниСм ΠΈ рисунком для Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива:

char aname[][15] = {"НСправ. мСсяц", "Π―Π½Π²", "Π€Π΅Π²Ρ€", "ΠœΠ°Ρ€Ρ‚"};

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 5.9. ΠŸΠ΅Ρ€Π΅ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ day_of_year ΠΈ month_day, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ вмСсто индСксов ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ.

5.10 АргумСнты ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки

Π’ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ срСдС, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰Π΅ΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ Π‘ΠΈ, имССтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΈΠ»ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ запускаСмой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки. Π’ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ‹Π·ΠΎΠ²Π° main ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π΄Π²Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°. Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΌ argc (сокращСниС ΠΎΡ‚ argument count), стоит количСство Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС. Π’Ρ‚ΠΎΡ€ΠΎΠΉ, argv (ΠΎΡ‚ argument vector), являСтся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π° массив ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… строк, содСрТащих сами Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹. Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с этими строками ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ.

ΠŸΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ - ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° echo ("эхо"), которая ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ своСй ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки Π² ΠΎΠ΄Π½ΠΎΠΉ строчкС, отдСляя ΠΈΡ… Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π° ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈ. Π’Π°ΠΊ, ΠΊΠΎΠΌΠ°Π½Π΄Π°

echo Здравствуй, ΠΌΠΈΡ€!

НапСчатаСт

Здравствуй, ΠΌΠΈΡ€!

По соглашСнию argv[0] Π΅ΡΡ‚ΡŒ имя Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ argc Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±Ρ‹Π²Π°Π΅Ρ‚ мСньшС 1. Если argc Ρ€Π°Π²Π΅Π½ 1, Ρ‚ΠΎ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС послС ΠΈΠΌΠ΅Π½ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π½Π΅Ρ‚. Π’ нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ argc Ρ€Π°Π²Π΅Π½ 3, ΠΈ соотвСтствСнно argv[0], argv[1] ΠΈ argv[2] ΡΡƒΡ‚ΡŒ строки "echo", "Здравствуй," ΠΈ "ΠΌΠΈΡ€!". ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ - это argv[1], послСдний - argv[argc-1]. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, стандарт Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ argv[argc] всСгда Π±Ρ‹Π» пустым ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ.

ΠŸΠ΅Ρ€Π²Π°Ρ вСрсия ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ echo Ρ‚Ρ€Π°ΠΊΡ‚ΡƒΠ΅Ρ‚ argv ΠΊΠ°ΠΊ массив ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ.

#include β€Ήstdio.hβ€Ί


/* эхо Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки: вСрсия 1 */

main(int argc, char *argv[])

{

 int i;

 for (i = 1; i β€Ή argc; i++)

  printf("%s%s", argv[i], (i β€Ή argc-1) ? " " : ");

 printf("\n");

 return 0;

}

Π’Π°ΠΊ ΠΊΠ°ΠΊ argv - это ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° массив ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π½ΠΈΠΌ ΠΊΠ°ΠΊ с ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ, Π° Π½Π΅ ΠΊΠ°ΠΊ с индСксируСмым массивом. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° основана Π½Π° ΠΏΡ€ΠΈΡ€Π°Ρ‰Π΅Π½ΠΈΠΈ argv, ΠΎΠ½ приращиваСтся Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° char; ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ заканчиваСтся, ΠΊΠΎΠ³Π΄Π° исчСрпан argc.

#include β€Ήstdio.hβ€Ί


/* эхо Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки; вСрсия 2 */

main(int argc, char *argv[])

{

 while (--argc β€Ί 0)

  printf("%s%s", *++argv, (argc β€Ί 1) ? " " : ");

 print f("\n");

 return 0;

}

АргумСнт argv - ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π½Π°Ρ‡Π°Π»ΠΎ массива строк Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². ИспользованиС Π² ++argv прСфиксного ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° ++ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π½ argv[1],Π° Π½Π΅ argv[0]. КаТдоС ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠ΅ ΠΏΡ€ΠΈΡ€Π°Ρ‰Π΅Π½ΠΈΠ΅ указатСля Π΄Π°Π΅Ρ‚ Π½Π°ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ *argv. Π’ это ΠΆΠ΅ врСмя Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ argc ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ Π½Π° 1, ΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΎ станСт Π½ΡƒΠ»Π΅ΠΌ, всС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π½Ρ‹. Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ printf ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈ Ρ‚Π°ΠΊ:

printf((argc β€Ί 1)? "%s ": "%s", *++argv);

Как Π²ΠΈΠ΄ΠΈΠΌ, Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π² printf Ρ‚ΠΎΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ.

Π’ качСствС Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° возьмСм ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ поиска ΠΎΠ±Ρ€Π°Π·Ρ†Π°, Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Π½Π½ΡƒΡŽ Π² ΠΏΠ°Ρ€Π°Π³Ρ€Π°Ρ„Π΅ 4.1, ΠΈ нСсколько ΡƒΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΡƒΠ΅ΠΌ Π΅Π΅. Если Π²Ρ‹ ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, ΠΎΠ±Ρ€Π°Π·Π΅Ρ† для поиска ΠΌΡ‹ "Π²ΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ" Π³Π»ΡƒΠ±ΠΎΠΊΠΎ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π° это, ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Π½Π΅ Π»ΡƒΡ‡ΡˆΠ΅Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. ΠŸΠΎΡΡ‚Ρ€ΠΎΠΈΠΌ Π½Π°ΡˆΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΏΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ с grep ΠΈΠ· UNIXa, Ρ‚. Π΅. Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Ρ€Π°Π·Π΅Ρ† для поиска задавался ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС.

#include β€Ήstdio.hβ€Ί

#include β€Ήstring.hβ€Ί

#define MAXLINE 1000


int getline(char *line, int max);

/* find: ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ строк с ΠΎΠ±Ρ€Π°Π·Ρ†ΠΎΠΌ, Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ 1-ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ */

main(int argc, char *argv[])

{

 char line[MAXLINE];

 int found = 0;


 if (argc != 2)

  printf("Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π² find ΠΎΠ±Ρ€Π°Π·Π΅Ρ†\n");

 else

  while (getline(line, MAXLINE) β€Ί 0)

   if (strstr(line, argv[1]) β€Ί= NULL) {

    printf ("%s", line);

    found++;

   }

 return found;

}

Бтандартная функция strstr(s,t) Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΏΠ΅Ρ€Π²ΡƒΡŽ Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΠ²ΡˆΡƒΡŽΡΡ строку t Π² строкС s ΠΈΠ»ΠΈ NULL, Ссли Ρ‚Π°ΠΊΠΎΠ²ΠΎΠΉ Π² s Π½Π΅ Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΠ»ΠΎΡΡŒ. Ѐункция объявлСна Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ β€Ήstring.hβ€Ί.

Π­Ρ‚Ρƒ модСль ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‚ΡŒ ΠΈ дальшС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ конструкции с указатСлями. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π²Π²ΠΎΠ΄ΠΈΠΌ Π΅Ρ‰Π΅ Π΄Π²Π° Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°. Один ΠΈΠ· Π½ΠΈΡ… прСдписываСт ΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ всС строки, ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚Π΅Ρ…, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… встрСчаСтся ΠΎΠ±Ρ€Π°Π·Π΅Ρ†; Π²Ρ‚ΠΎΡ€ΠΎΠΉ - ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌΠΎΠΉ строкой ΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ Π΅Π΅ порядковый Π½ΠΎΠΌΠ΅Ρ€.

По ΠΎΠ±Ρ‰Π΅ΠΌΡƒ соглашСнию для Π‘ΠΈ-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π² систСмС UNIX Π·Π½Π°ΠΊ минус ΠΏΠ΅Ρ€Π΅Π΄ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ Π²Π²ΠΎΠ΄ΠΈΡ‚ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ ΠΈΠ»ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€. Π’Π°ΠΊ, Ссли -x слуТит ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠΌ слова "ΠΊΡ€ΠΎΠΌΠ΅", ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ измСняСт Π·Π°Π΄Π°Π½ΠΈΠ΅ Π½Π° ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΠ΅, Π° -n ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎΡΡ‚ΡŒ Π² Π½ΡƒΠΌΠ΅Ρ€Π°Ρ†ΠΈΠΈ строк, Ρ‚ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π°

find -x -n ΠΎΠ±Ρ€Π°Π·Π΅Ρ†

Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ всС строки, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π·Π΅Ρ†, ΠΈ, ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строкой ΡƒΠΊΠ°ΠΆΠ΅Ρ‚ Π΅Π΅ Π½ΠΎΠΌΠ΅Ρ€.