ЧисловыС массивы Π² языкС c. ΠœΠ°ΡΡΠΈΠ²Ρ‹

  • Tutorial

Π’ этом постС я ΠΏΠΎΡΡ‚Π°Ρ€Π°ΡŽΡΡŒ ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ Ρ‚ΠΎΠ½ΠΊΠΈΠ΅ понятия Π² C ΠΈ C++, ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ, ссылки ΠΈ массивы. Π’ частности, я ΠΎΡ‚Π²Π΅Ρ‡Ρƒ Π½Π° вопрос, Ρ‚Π°ΠΊ ΡΠ²Π»ΡΡŽΡ‚ΡΡ массивы C указатСлями ΠΈΠ»ΠΈ Π½Π΅Ρ‚.

ΠžΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΡ ΠΈ прСдполоТСния

  • Π― Π±ΡƒΠ΄Ρƒ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŒ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² C++ Π΅ΡΡ‚ΡŒ ссылки, Π° Π² C - Π½Π΅Ρ‚, поэтому я Π½Π΅ Π±ΡƒΠ΄Ρƒ постоянно Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Ρ‚ΡŒ, ΠΎ ΠΊΠ°ΠΊΠΎΠΌ ΠΈΠΌΠ΅Π½Π½ΠΎ языкС (C/C++ ΠΈΠ»ΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ C++) я сСйчас Π³ΠΎΠ²ΠΎΡ€ΡŽ, Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŒ ΠΏΠΎΠΉΠΌΡ‘Ρ‚ это ΠΈΠ· контСкста;
  • Π’Π°ΠΊΠΆΠ΅, я ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡŽ, Ρ‡Ρ‚ΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŒ ΡƒΠΆΠ΅ Π·Π½Π°Π΅Ρ‚ C ΠΈ C++ Π½Π° Π±Π°Π·ΠΎΠ²ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΈ Π·Π½Π°Π΅Ρ‚, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, синтаксис объявлСния ссылки. Π’ этом постС я Π±ΡƒΠ΄Ρƒ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ Π΄ΠΎΡ‚ΠΎΡˆΠ½Ρ‹ΠΌ Ρ€Π°Π·Π±ΠΎΡ€ΠΎΠΌ ΠΌΠ΅Π»ΠΎΡ‡Π΅ΠΉ;
  • Π‘ΡƒΠ΄Ρƒ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏΡ‹ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ выглядСло Π±Ρ‹ объявлСниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ TYPE ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ‚ΠΈΠΏΠ°. НапримСр, Ρ‚ΠΈΠΏ «массив Π΄Π»ΠΈΠ½Ρ‹ 2 int"ΠΎΠ²Β» я Π±ΡƒΠ΄Ρƒ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ int TYPE ;
  • Π― Π±ΡƒΠ΄Ρƒ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π² основном ΠΈΠΌΠ΅Π΅ΠΌ Π΄Π΅Π»ΠΎ с ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ int TYPE , int *TYPE ΠΈ Ρ‚. Π΄., для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ =, &, * ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΠΈ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ Π²Π΅Ρ‰ΠΈ;
  • Β«ΠžΠ±ΡŠΠ΅ΠΊΡ‚Β» всСгда Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ·Π½Π°Ρ‡Π°Ρ‚ΡŒ «всё, Ρ‡Ρ‚ΠΎ Π½Π΅ ссылка», Π° Π½Π΅ «экзСмпляр класса»;
  • Π’Π΅Π·Π΄Π΅, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΎΠ³ΠΎΠ²ΠΎΡ€Π΅Π½Π½Ρ‹Ρ… случаСв, ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°ΡŽΡ‚ΡΡ C89 ΠΈ C++98.

Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ ΠΈ ссылки

Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ . Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ, я Ρ€Π°ΡΡΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π΅ Π±ΡƒΠ΄Ρƒ. :) Π‘ΡƒΠ΄Π΅ΠΌ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ это Π·Π½Π°Π΅Ρ‚Π΅. Напомню лишь ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π²Π΅Ρ‰ΠΈ (всС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠ΄Π° ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ находящимися Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, main):

Int x; int *y = &x; // ΠžΡ‚ любой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π²Π·ΡΡ‚ΡŒ адрСс ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ взятия адрСса "&". Π­Ρ‚Π° опСрация Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ int z = *y; // Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Ρ‹ΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ разымСновывания "*". Π­Ρ‚ΠΎ опСрация Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚ΠΎΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ

Π’Π°ΠΊΠΆΠ΅ напомню ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅: char - это всСгда Ρ€ΠΎΠ²Π½ΠΎ ΠΎΠ΄ΠΈΠ½ Π±Π°ΠΉΡ‚ ΠΈ Π²ΠΎ всСх стандартах C ΠΈ C++ sizeof (char) == 1 (Π½ΠΎ ΠΏΡ€ΠΈ этом стандарты Π½Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‚, Ρ‡Ρ‚ΠΎ Π² Π±Π°ΠΉΡ‚Π΅ содСрТится ΠΈΠΌΠ΅Π½Π½ΠΎ 8 Π±ΠΈΡ‚:)). Π”Π°Π»Π΅Π΅, Ссли ΠΏΡ€ΠΈΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ Π½Π° ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Ρ‚ΠΈΠΏ T число, Ρ‚ΠΎ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ΅ числСнноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ этого указатСля увСличится Π½Π° это число, ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½Π½ΠΎΠ΅ Π½Π° sizeof (T) . Π’. Π΅. Ссли p ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ T *TYPE , Ρ‚ΠΎ p + 3 эквивалСнтно (T *)((char *)p + 3 * sizeof (T)) . АналогичныС сообраТСния относятся ΠΈ ΠΊ Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΡŽ.

Бсылки . Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎ ΠΏΠΎΠ²ΠΎΠ΄Ρƒ ссылок. Бсылки - это Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ, Π½ΠΎ с Π΄Ρ€ΡƒΠ³ΠΈΠΌ синтаксисом ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Π²Π°ΠΆΠ½Ρ‹ΠΌΠΈ отличиями, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ€Π΅Ρ‡ΡŒ ΠΏΠΎΠΉΠ΄Ρ‘Ρ‚ дальшС. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ Π½ΠΈΡ‡Π΅ΠΌ Π½Π΅ отличаСтся ΠΎΡ‚ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π² Π½Ρ‘ΠΌ Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΡƒΡŽΡ‚ ссылки вмСсто ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ:
int x; int &y = x; int z = y;

Если слСва ΠΎΡ‚ Π·Π½Π°ΠΊΠ° присваивания стоит ссылка, Ρ‚ΠΎ Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ способа ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ…ΠΎΡ‚ΠΈΠΌ ΠΌΡ‹ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ самой ссылкС ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ½Π° ссылаСтся. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ρ‚Π°ΠΊΠΎΠ΅ присваиваниС всСгда присваиваСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ, Π° Π½Π΅ ссылкС. Но это Π½Π΅ относится ΠΊ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ссылки: инициализируСтся, разумССтся, сама ссылка. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ послС ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ссылки Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ способа ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Ρ‘ саму, Ρ‚. Π΅. ссылка всСгда постоянна (Π½ΠΎ Π½Π΅ Π΅Ρ‘ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚).

Lvalue . Π’Π΅ выраТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒ, Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ lvalue Π² C, C++ ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ… языках (это сокращСниС ΠΎΡ‚ Β«left valueΒ», Ρ‚. Π΅. слСва ΠΎΡ‚ Π·Π½Π°ΠΊΠ° равСнства). ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ выраТСния Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ rvalue. ИмСна ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΡΠ²Π»ΡΡŽΡ‚ΡΡ lvalue, Π½ΠΎ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ½ΠΈ. ВыраТСния a , some_struct.some_field , *ptr , *(ptr + 3) - Ρ‚ΠΎΠΆΠ΅ lvalue.

Π£Π΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ„Π°ΠΊΡ‚ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ссылки ΠΈ lvalue - это Π² ΠΊΠ°ΠΊΠΎΠΌ-Ρ‚ΠΎ смыслС ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅. Π”Π°Π²Π°ΠΉΡ‚Π΅ порассуТдаСм. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ lvalue? Π­Ρ‚ΠΎ Π½Π΅Ρ‡Ρ‚ΠΎ, Ρ‡Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ. Π’. Π΅. это Π½Π΅ΠΊΠΎΠ΅ фиксированноС мСсто Π² памяти, ΠΊΡƒΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ. Π’. Π΅. адрСс. Π’. Π΅. ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΈΠ»ΠΈ ссылка (ΠΊΠ°ΠΊ ΠΌΡ‹ ΡƒΠΆΠ΅ Π·Π½Π°Π΅ΠΌ, ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ ΠΈ ссылки - это Π΄Π²Π° синтаксичСски Ρ€Π°Π·Π½Ρ‹Ρ… способа Π² C++ Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚ΡŒ понятиС адрСса). ΠŸΡ€ΠΈΡ‡Ρ‘ΠΌ скорСС ссылка, Ρ‡Π΅ΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ, Ρ‚. ΠΊ. ссылку ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ слСва ΠΎΡ‚ Π·Π½Π°ΠΊΠ° равСнства ΠΈ это Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ·Π½Π°Ρ‡Π°Ρ‚ΡŒ присваиваниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ссылка. Π—Π½Π°Ρ‡ΠΈΡ‚, lvalue - это ссылка.

ОкСй, Π½ΠΎ вСдь (ΠΏΠΎΡ‡Ρ‚ΠΈ любая) пСрСмСнная Ρ‚ΠΎΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ слСва ΠΎΡ‚ Π·Π½Π°ΠΊΠ° равСнства. Π—Π½Π°Ρ‡ΠΈΡ‚, (такая) пСрСмСнная - ссылка? ΠŸΠΎΡ‡Ρ‚ΠΈ. Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅Π΅ собой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ - ссылка.

Π˜Π½Ρ‹ΠΌΠΈ словами, допустим, ΠΌΡ‹ объявили int x . Π’Π΅ΠΏΠ΅Ρ€ΡŒ x - это пСрСмСнная Ρ‚ΠΈΠΏΠ° int TYPE ΠΈ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ. Π­Ρ‚ΠΎ int ΠΈ всё Ρ‚ΡƒΡ‚. Но Ссли я Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΈΡˆΡƒ x + 2 ΠΈΠ»ΠΈ x = 3 , Ρ‚ΠΎ Π² этих выраТСниях ΠΏΠΎΠ΄Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ x ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ int &TYPE . ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΈΠ½Π°Ρ‡Π΅ этот x Π½ΠΈΡ‡Π΅ΠΌ Π½Π΅ отличался Π±Ρ‹ ΠΎΡ‚, скаТСм, 10, ΠΈ Π΅ΠΌΡƒ (ΠΊΠ°ΠΊ ΠΈ дСсяткС) нСльзя Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ.

Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ (Β«Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΡΠ²Π»ΡΡŽΡ‰Π΅Π΅ΡΡ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ - ссылка») - моя Π²Ρ‹Π΄ΡƒΠΌΠΊΠ°. Π’. Π΅. Π½ΠΈ Π² ΠΊΠ°ΠΊΠΎΠΌ ΡƒΡ‡Π΅Π±Π½ΠΈΠΊΠ΅, стандартС ΠΈ Ρ‚. Π΄. я этот ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π½Π΅ Π²ΠΈΠ΄Π΅Π». Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΎΠ½ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΈ Π΅Π³ΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π²Π΅Ρ€Π½Ρ‹ΠΌ. Если Π±Ρ‹ я Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Π» компилятор, я Π±Ρ‹ просто считал Ρ‚Π°ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π² выраТСниях ссылками, ΠΈ, Π²ΠΏΠΎΠ»Π½Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊ ΠΈ прСдполагаСтся Π² Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… компиляторах.

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ «любоС lvalue - ссылка» - Ρ‚ΠΎΠΆΠ΅ моя Π²Ρ‹Π΄ΡƒΠΌΠΊΠ°. А Π²ΠΎΡ‚ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ «любая ссылка - lvalueΒ» - Π²ΠΏΠΎΠ»Π½Π΅ Π·Π°ΠΊΠΎΠ½Π½Ρ‹ΠΉ, ΠΎΠ±Ρ‰Π΅ΠΏΡ€ΠΈΠ·Π½Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ (разумССтся, ссылка Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ссылкой Π½Π° измСняСмый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΈ этот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π΄ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ присваиваниС).

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, с ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ Π½Π°ΡˆΠΈΡ… соглашСний, сформулируСм строго ΠΏΡ€Π°Π²ΠΈΠ»Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹ со ссылками: Ссли объявлСно, скаТСм, int x , Ρ‚ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ x ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ int &TYPE . Если Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ это Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ (ΠΈΠ»ΠΈ любоС Π΄Ρ€ΡƒΠ³ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° ссылка) стоит слСва ΠΎΡ‚ Π·Π½Π°ΠΊΠ° равСнства, Ρ‚ΠΎ ΠΎΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΊΠ°ΠΊ ссылка, практичСски Π²ΠΎ всСх ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… случаях (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ситуации x + 2) x автоматичСски конвСртируСтся Π² Ρ‚ΠΈΠΏ int TYPE (Π΅Ρ‰Ρ‘ ΠΎΠ΄Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ, рядом с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ссылка Π½Π΅ конвСртируСтся Π² свой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, являСтся &, ΠΊΠ°ΠΊ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ Π΄Π°Π»Π΅Π΅). Π‘Π»Π΅Π²Π° ΠΎΡ‚ Π·Π½Π°ΠΊΠ° равСнства ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚ΠΎΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ссылка. Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ (Π½Π΅ΠΊΠΎΠ½ΡΡ‚Π°Π½Ρ‚Π½ΡƒΡŽ) ссылку ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ссылка.

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ * ΠΈ & . Наши соглашСния ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΠΎ-Π½ΠΎΠ²ΠΎΠΌΡƒ Π²Π·Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ * ΠΈ &. Π’Π΅ΠΏΠ΅Ρ€ΡŒ становится понятно ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅: опСрация * ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ (ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ это Π±Ρ‹Π»ΠΎ всСгда извСстно) ΠΈ ΠΎΠ½Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ссылку Π½Π° Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ‚ΠΈΠΏ. & примСняСтся всСгда ΠΊ ссылкС ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Ρ‚ΠΈΠΏΠ°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, * ΠΈ & ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ ΠΈ ссылки Π΄Ρ€ΡƒΠ³ Π² Π΄Ρ€ΡƒΠ³Π°. Π’. Π΅. ΠΏΠΎ сути ΠΎΠ½ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°ΡŽΡ‚ ΠΈ лишь Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‚ сущности ΠΎΠ΄Π½ΠΎΠ³ΠΎ синтаксиса Π½Π° сущности Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ! Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, & Π²ΠΎΠΎΠ±Ρ‰Π΅-Ρ‚ΠΎ Π½Π΅ совсСм ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ взятия адрСса: ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Π° лишь ΠΊ ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ адрСсу, просто ΠΎΠ½Π° мСняСт синтаксичСскоС Π²ΠΎΠΏΠ»ΠΎΡ‰Π΅Π½ΠΈΠ΅ этого адрСса.

Π—Π°ΠΌΠ΅Ρ‡Ρƒ, Ρ‡Ρ‚ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ ΠΈ ссылки ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ int *x ΠΈ int &x . Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ «объявлСниС подсказываСт использованиС» лишний Ρ€Π°Π· подтвСрТдаСтся: объявлСниС указатСля Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚, ΠΊΠ°ΠΊ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² ссылку, Π° объявлСниС ссылки - Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚.

Π’Π°ΠΊΠΆΠ΅ Π·Π°ΠΌΠ΅Ρ‡Ρƒ, Ρ‡Ρ‚ΠΎ &*EXPR (здСсь EXPR - это ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€) эквивалСнтно EXPR всСгда, ΠΊΠΎΠ³Π΄Π° ΠΈΠΌΠ΅Π΅Ρ‚ смысл (Ρ‚. Π΅. всСгда, ΠΊΠΎΠ³Π΄Π° EXPR - ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ), Π° *&EXPR Ρ‚ΠΎΠΆΠ΅ эквивалСнтно EXPR всСгда, ΠΊΠΎΠ³Π΄Π° ΠΈΠΌΠ΅Π΅Ρ‚ смысл (Ρ‚. Π΅. ΠΊΠΎΠ³Π΄Π° EXPR - ссылка).

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

Π˜Ρ‚Π°ΠΊ, Π΅ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… - массив. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ массивы, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚Π°ΠΊ:
int x;
Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобках Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ΠΏΡ€Π΅ΠΌΠ΅Π½Π½ΠΎ константой Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ компиляции Π² C89 ΠΈ C++98. ΠŸΡ€ΠΈ этом Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобках Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΡ‚ΠΎΡΡ‚ΡŒ число, пустыС ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки Π½Π΅ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ.

Подобно Ρ‚ΠΎΠΌΡƒ, ΠΊΠ°ΠΊ всС Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ (напомню, ΠΌΡ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ всС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠ΄Π° находятся Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ) находятся Π½Π° стСкС, массивы Ρ‚ΠΎΠΆΠ΅ находятся Π½Π° стСкС. Π’. Π΅. ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΏΡ€ΠΈΠ²Ρ‘Π» ΠΊ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΡŽ прямо Π½Π° стСкС ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° памяти Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 5 * sizeof (int) , Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ размСщаСтся наш массив. НС Π½ΡƒΠΆΠ½ΠΎ Π΄ΡƒΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ этот ΠΊΠΎΠ΄ объявил Π½Π΅ΠΊΠΈΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΠΏΠ°ΠΌΡΡ‚ΡŒ, Ρ€Π°Π·ΠΌΠ΅Ρ‰Ρ‘Π½Π½ΡƒΡŽ Π³Π΄Π΅-Ρ‚ΠΎ Ρ‚Π°ΠΌ Π΄Π°Π»Π΅ΠΊΠΎ, Π² ΠΊΡƒΡ‡Π΅. НСт, ΠΌΡ‹ объявили массив, самый настоящий. Π—Π΄Π΅ΡΡŒ, Π½Π° стСкС.

Π§Π΅ΠΌΡƒ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π½ΠΎ sizeof (x) ? РазумССтся, ΠΎΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π½ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ нашСго массива, Ρ‚. Π΅. 5 * sizeof (int) . Если ΠΌΡ‹ пишСм
struct foo { int a; int b; };
Ρ‚ΠΎ, ΠΎΠΏΡΡ‚ΡŒ-Ρ‚Π°ΠΊΠΈ, мСсто для массива Π±ΡƒΠ΄Π΅Ρ‚ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ Π²Ρ‹Π΄Π΅Π»ΡΡ‚ΡŒΡΡ прямо Π²Π½ΡƒΡ‚Ρ€ΠΈ структуры, ΠΈ sizeof ΠΎΡ‚ этой структуры Π±ΡƒΠ΄Π΅Ρ‚ это ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π°Ρ‚ΡŒ.

ΠžΡ‚ массива ΠΌΠΎΠΆΠ½ΠΎ Π²Π·ΡΡ‚ΡŒ адрСс (&x), ΠΈ это Π±ΡƒΠ΄Π΅Ρ‚ самый настоящий ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ‚ΠΎ мСсто, Π³Π΄Π΅ этот массив располоТСн. Π’ΠΈΠΏ Ρƒ выраТСния &x , ΠΊΠ°ΠΊ Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Π±ΡƒΠ΄Π΅Ρ‚ int (*TYPE) . Π’ Π½Π°Ρ‡Π°Π»Π΅ массива Ρ€Π°Π·ΠΌΠ΅Ρ‰Ρ‘Π½ Π΅Π³ΠΎ Π½ΡƒΠ»Π΅Π²ΠΎΠΉ элСмСнт, поэтому адрСс самого массива ΠΈ адрСс Π΅Π³ΠΎ Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ элСмСнта числСнно ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚. Π’. Π΅. &x ΠΈ &(x) числСнно Ρ€Π°Π²Π½Ρ‹ (Ρ‚ΡƒΡ‚ я Π»ΠΈΡ…ΠΎ написал Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ &(x) , Π½Π° самом Π΄Π΅Π»Π΅ Π² Π½Ρ‘ΠΌ Π½Π΅ всё Ρ‚Π°ΠΊ просто, ΠΊ этому ΠΌΡ‹ Π΅Ρ‰Ρ‘ вСрнёмся). Но эти выраТСния ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ - int (*TYPE) ΠΈ int *TYPE , поэтому ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ ΠΈΡ… ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ == Π½Π΅ получится. Но ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ‚Ρ€ΡŽΠΊ с void * : ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ истинным: (void *)&x == (void *)&(x) .

Π₯ΠΎΡ€ΠΎΡˆΠΎ, Π±ΡƒΠ΄Π΅ΠΌ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, я вас ΡƒΠ±Π΅Π΄ΠΈΠ», Ρ‡Ρ‚ΠΎ массив - это ΠΈΠΌΠ΅Π½Π½ΠΎ массив, Π° Π½Π΅ Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π΅Ρ‰Ρ‘. ΠžΡ‚ΠΊΡƒΠ΄Π° Ρ‚ΠΎΠ³Π΄Π° бСрётся вся эта ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ указатСлями ΠΈ массивами? Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ имя массива ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΏΡ€ΠΈ Π»ΡŽΠ±Ρ‹Ρ… опСрациях прСобразуСтся Π² ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π΅Π³ΠΎ Π½ΡƒΠ»Π΅Π²ΠΎΠΉ элСмСнт.

Π˜Ρ‚Π°ΠΊ, ΠΌΡ‹ объявили int x . Если ΠΌΡ‹ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ пишСм x + 0 , Ρ‚ΠΎ это ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ наш x (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π» Ρ‚ΠΈΠΏ int TYPE , ΠΈΠ»ΠΈ, Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΡ‡Π½ΠΎ, int (&TYPE)) Π² &(x) , Ρ‚. Π΅. Π² ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π½ΡƒΠ»Π΅Π²ΠΎΠΉ элСмСнт массива x. Π’Π΅ΠΏΠ΅Ρ€ΡŒ наш x ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ int *TYPE .

ΠšΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΈ массива Π² void * ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊ Π½Π΅ΠΌΡƒ == Ρ‚ΠΎΠΆΠ΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΡŽ этого ΠΈΠΌΠ΅Π½ΠΈ Π² ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт, поэтому:
&x == x // ошибка компиляции, Ρ€Π°Π·Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹: int (*TYPE) ΠΈ int *TYPE (void *)&x == (void *)x // истина x == x + 0 // истина x == &(x) // истина

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ . Π—Π°ΠΏΠΈΡΡŒ a[b] всСгда эквивалСнтна *(a + b) (напомню, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π΅ рассматриваСм пСрСопрСдСлСния operator ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ). Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, запись x ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

  • x эквивалСнтно *(x + 2)
  • x + 2 относится ΠΊ Ρ‚Π΅ΠΌ опСрациям, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… имя массива прСобразуСтся Π² ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт, поэтому это происходит
  • Π”Π°Π»Π΅Π΅, Π² соотвСтствии с ΠΌΠΎΠΈΠΌΠΈ объяснСниями Π²Ρ‹ΡˆΠ΅, x + 2 эквивалСнтно (int *)((char *)x + 2 * sizeof (int)) , Ρ‚. Π΅. x + 2 ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Β«ΡΠ΄Π²ΠΈΠ½ΡƒΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ x Π½Π° Π΄Π²Π° int"Π°Β»
  • НаконСц, ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° бСрётся опСрация разымСнования ΠΈ ΠΌΡ‹ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌ Ρ‚ΠΎΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ‰Ρ‘Π½ ΠΏΠΎ этому сдвинутому ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ

Π’ΠΈΠΏΡ‹ Ρƒ ΡƒΡ‡Π°ΡΡ‚Π²ΠΎΠ²Π°Π²ΡˆΠΈΡ… Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅:
x // int (&TYPE), послС прСобразования Ρ‚ΠΈΠΏΠ°: int *TYPE x + 2 // int *TYPE *(x + 2) // int &TYPE x // int &TYPE

Π’Π°ΠΊΠΆΠ΅ Π·Π°ΠΌΠ΅Ρ‡Ρƒ, Ρ‡Ρ‚ΠΎ слСва ΠΎΡ‚ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобок Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ массив, Ρ‚Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ любой ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ. НапримСр, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ (x + 2) , ΠΈ это Π±ΡƒΠ΄Π΅Ρ‚ эквивалСнтно x . Π•Ρ‰Ρ‘ Π·Π°ΠΌΠ΅Ρ‡Ρƒ, Ρ‡Ρ‚ΠΎ *a ΠΈ a всСгда эквивалСнтны, ΠΊΠ°ΠΊ Π² случаС, ΠΊΠΎΠ³Π΄Π° a - массив, Ρ‚Π°ΠΊ ΠΈ ΠΊΠΎΠ³Π΄Π° a - ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠ°ΠΊ я ΠΈ ΠΎΠ±Π΅Ρ‰Π°Π», я Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡΡŒ ΠΊ &(x) . Π’Π΅ΠΏΠ΅Ρ€ΡŒ ясно, Ρ‡Ρ‚ΠΎ Π² этом Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ спСрва x прСобразуСтся Π² ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ, Π·Π°Ρ‚Π΅ΠΌ ΠΊ этому ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ Π² соотвСтствии с Π²Ρ‹ΡˆΠ΅ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½Ρ‹ΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ примСняСтся ΠΈ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ получаСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° int &TYPE , ΠΈ Π½Π°ΠΊΠΎΠ½Π΅Ρ†, ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ & ΠΎΠ½ΠΎ прСобразуСтся ΠΊ Ρ‚ΠΈΠΏΡƒ int *TYPE . ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, ΠΎΠ±ΡŠΡΡΠ½ΡΡ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ этого слоТного выраТСния (Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΡƒΠΆΠ΅ выполняСтся ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ массива ΠΊ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ) Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»Π΅Π΅ простоС понятиС прСобразования массива ΠΊ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ - это Π±Ρ‹Π» Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΡƒΡ…Π»Ρ‘ΠΆ.

А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ вопрос Π½Π° засыпку : Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ &x + 1 ? Π§Ρ‚ΠΎ ΠΆ, &x - это ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° вСсь массив Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ, + 1 ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΡˆΠ°Π³Ρƒ Π½Π° вСсь этот массив. Π’. Π΅. &x + 1 - это (int (*))((char *)&x + sizeof (int )) , Ρ‚. Π΅. (int (*))((char *)&x + 5 * sizeof (int)) (здСсь int (*) - это int (*TYPE)). Π˜Ρ‚Π°ΠΊ, &x + 1 числСнно Ρ€Π°Π²Π½ΠΎ x + 5 , Π° Π½Π΅ x + 1 , ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ. Π”Π°, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΌΡ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ Π½Π° ΠΏΠ°ΠΌΡΡ‚ΡŒ, которая находится Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ массива (сразу послС послСднСго элСмСнта), Π½ΠΎ ΠΊΠΎΠ³ΠΎ это Π²ΠΎΠ»Π½ΡƒΠ΅Ρ‚? Π’Π΅Π΄ΡŒ Π² C всё Ρ€Π°Π²Π½ΠΎ Π½Π΅ провСряСтся Π²Ρ‹Ρ…ΠΎΠ΄ Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ массива. Π’Π°ΠΊΠΆΠ΅, Π·Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ *(&x + 1) == x + 5 истинно. Π•Ρ‰Ρ‘ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π²ΠΎΡ‚ Ρ‚Π°ΠΊ: (&x) == x + 5 . Π’Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ истинным *((&x)) == x , ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ Ρ‚ΠΎΠΆΠ΅ самоС, (&x) == x (Ссли ΠΌΡ‹, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π½Π΅ схватим segmentation fault Π·Π° ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΡƒ обращСния Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ нашСй памяти:)).

Массив нСльзя ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ . Если Π²Ρ‹ Π½Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ int x ΠΈΠ»ΠΈ int x Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚ΠΎ это Π±ΡƒΠ΄Π΅Ρ‚ эквивалСнтно int *x ΠΈ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ всСгда Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒΡΡ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ (sizeof ΠΎΡ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊΠΈΠΌ, ΠΊΠ°ΠΊ Ρƒ указатСля). ΠŸΡ€ΠΈ этом Ρ€Π°Π·ΠΌΠ΅Ρ€ массива, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ. Π’Ρ‹ запросто ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ int x ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Ρ‚ΡƒΠ΄Π° массив Π΄Π»ΠΈΠ½Ρ‹ 3.

Однако, Π² C++ сущСствуСт способ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ссылку Π½Π° массив:
void f (int (&x)) { // sizeof (x) здСсь Ρ€Π°Π²Π΅Π½ 5 * sizeof (int) } int main (void) { int x; f (x); // OK f (x + 0); // НСльзя int y; f (y); // НСльзя, Π½Π΅ Ρ‚ΠΎΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ }
ΠŸΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ Π²Ρ‹ всё Ρ€Π°Π²Π½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‘Ρ‚Π΅ лишь ссылку, Π° Π½Π΅ массив, Ρ‚. Π΅. массив Π½Π΅ копируСтся. Но всё ΠΆΠ΅ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ нСсколько ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΉ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ΠΉ указатСля. ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‘Ρ‚ΡΡ ссылка Π½Π° массив. ВмСсто Π½Π΅Ρ‘ нСльзя ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ. НуТно ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ массив ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°. Π’Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ссылка Π½Π° массив Π±ΡƒΠ΄Π΅Ρ‚ вСсти сСбя ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΊΠ°ΠΊ ссылка Π½Π° массив, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρƒ Π½Π΅Ρ‘ Π±ΡƒΠ΄Π΅Ρ‚ sizeof ΠΊΠ°ΠΊ Ρƒ массива.

И Ρ‡Ρ‚ΠΎ самоС интСрСсноС, эту ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ:
// ВычисляСт Π΄Π»ΠΈΠ½Ρƒ массива template size_t len (t (&a)[n]) { return n; }
ΠŸΠΎΡ…ΠΎΠΆΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° функция std::end Π² C++11 для массивов.

Β«Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° массив» . Π‘Ρ‚Ρ€ΠΎΠ³ΠΎ говоря, Β«ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° массив» - это ΠΈΠΌΠ΅Π½Π½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° массив ΠΈ Π½ΠΈΡ‡Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ΅. Π˜Π½Ρ‹ΠΌΠΈ словами:
int (*a); // Π­Ρ‚ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° массив. Π‘Π°ΠΌΡ‹ΠΉ настоящий. Он ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ int (*TYPE) int b; int *c = b; // Π­Ρ‚ΠΎ Π½Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° массив. Π­Ρ‚ΠΎ просто ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ. Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт Π½Π΅ΠΊΠΎΠ΅Π³ΠΎ массива int *d = new int; // И это Π½Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° массив. Π­Ρ‚ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ
Однако, ΠΈΠ½ΠΎΠ³Π΄Π° ΠΏΠΎΠ΄ Ρ„Ρ€Π°Π·ΠΎΠΉ Β«ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° массив» Π½Π΅Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡŽΡ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ‰Ρ‘Π½ массив, Π΄Π°ΠΆΠ΅ Ссли Ρ‚ΠΈΠΏ Ρƒ этого указатСля нСподходящий. Π’ соотвСтствии с Ρ‚Π°ΠΊΠΈΠΌ Π½Π΅Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ΠΌ c ΠΈ d (ΠΈ b + 0) - это ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° массивы.

ΠœΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы . Если объявлСно int x , Ρ‚ΠΎ x - это Π½Π΅ массив Π΄Π»ΠΈΠ½Ρ‹ 5 Π½Π΅ΠΊΠΈΡ… ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… ΠΊΡƒΠ΄Π°-Ρ‚ΠΎ Π΄Π°Π»Π΅ΠΊΠΎ. НСт, x Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ - это Π΅Π΄ΠΈΠ½Ρ‹ΠΉ ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚Π½Ρ‹ΠΉ Π±Π»ΠΎΠΊ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 5 x 7, Ρ€Π°Π·ΠΌΠ΅Ρ‰Ρ‘Π½Π½Ρ‹ΠΉ Π½Π° стСкС. sizeof (x) Ρ€Π°Π²Π΅Π½ 5 * 7 * sizeof (int) . Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Π² памяти Ρ‚Π°ΠΊ: x , x , x , x , x , x , x , x ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Когда ΠΌΡ‹ пишСм x , события Ρ€Π°Π·Π²ΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ‚Π°ΠΊ:
x // int (&TYPE), послС прСобразования: int (*TYPE) x // int (&TYPE), послС прСобразования: int *TYPE x // int &TYPE
Π’ΠΎ ΠΆΠ΅ самоС относится ΠΊ **x . Π—Π°ΠΌΠ΅Ρ‡Ρƒ, Ρ‡Ρ‚ΠΎ Π² выраТСниях, скаТСм, x + 3 ΠΈ **x + 3 Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· памяти происходит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· (нСсмотря Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π΄Π²ΡƒΡ… Π·Π²Ρ‘Π·Π΄ΠΎΡ‡Π΅ΠΊ), Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ прСобразования ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ссылки Ρ‚ΠΈΠΏΠ° int &TYPE просто Π² int TYPE . Π’. Π΅. Ссли Π±Ρ‹ ΠΌΡ‹ взглянули Π½Π° ассСмблСрный ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ гСнСрируСтся ΠΈΠ· выраТСния **x + 3 , ΠΌΡ‹ Π±Ρ‹ Π² Π½Ρ‘ΠΌ ΡƒΠ²ΠΈΠ΄Π΅Π»ΠΈ, Ρ‡Ρ‚ΠΎ опСрация извлСчСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· памяти выполняСтся Ρ‚Π°ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·. **x + 3 ΠΌΠΎΠΆΠ½ΠΎ Π΅Ρ‰Ρ‘ ΠΏΠΎ-Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊ *(int *)x + 3 .

А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ посмотрим Π½Π° Ρ‚Π°ΠΊΡƒΡŽ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ:
int **y = new int *; for (int i = 0; i != 5; ++i) { y[i] = new int; }

Π§Ρ‚ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π΅ΡΡ‚ΡŒ y? y - это ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° массив (Π² Π½Π΅Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΌ смыслС!) ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° массивы (ΠΎΠΏΡΡ‚ΡŒ-Ρ‚Π°ΠΊΠΈ, Π² Π½Π΅Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΌ смыслС). НигдС здСсь Π½Π΅ появляСтся Π΅Π΄ΠΈΠ½Ρ‹ΠΉ Π±Π»ΠΎΠΊ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° 5 x 7, Π΅ΡΡ‚ΡŒ 5 Π±Π»ΠΎΠΊΠΎΠ² Ρ€Π°Π·ΠΌΠ΅Ρ€Π° 7 * sizeof (int) , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π΄Π°Π»Π΅ΠΊΠΎ Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π°. Π§Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ y ?
y // int **&TYPE y // int *&TYPE y // int &TYPE
Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ пишСм y + 3 , ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· памяти происходит Π΄Π²Π° Ρ€Π°Π·Π°: ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· массива y ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· массива y , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π΄Π°Π»Π΅ΠΊΠΎ ΠΎΡ‚ массива y. ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° этого Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ здСсь Π½Π΅ происходит прСобразования ΠΈΠΌΠ΅Π½ΠΈ массива Π² ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° с ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΌ массивом x. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ **y + 3 здСсь Π½Π΅ эквивалСнтСн *(int *)y + 3 .

Объясню Π΅Ρ‰Ρ‘ Ρ€Π°Π·ΠΎΠΊ. x эквивалСнтно *(*(x + 2) + 3) . И y эквивалСнтно *(*(y + 2) + 3) . Но Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ случаС наша Π·Π°Π΄Π°Ρ‡Π° Π½Π°ΠΉΡ‚ΠΈ Β«Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ элСмСнт Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ ряду» Π² Π΅Π΄ΠΈΠ½ΠΎΠΌ Π±Π»ΠΎΠΊΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° 5 x 7 (разумССтся, элСмСнты Π½ΡƒΠΌΠ΅Ρ€ΡƒΡŽΡ‚ΡΡ с нуля, поэтому этот Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ элСмСнт Π±ΡƒΠ΄Π΅Ρ‚ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ смыслС Ρ‡Π΅Ρ‚Π²Ρ‘Ρ€Ρ‚Ρ‹ΠΌ:)). ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ вычисляСт, Ρ‡Ρ‚ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ Π½ΡƒΠΆΠ½Ρ‹ΠΉ элСмСнт находится Π½Π° 2 * 7 + 3 -ΠΌ мСстС Π² этом Π±Π»ΠΎΠΊΠ΅ ΠΈ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ Π΅Π³ΠΎ. Π’. Π΅. x здСсь эквивалСнтно ((int *)x) , ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ Ρ‚ΠΎ ΠΆΠ΅ самоС, *((int *)x + 2 * 7 + 3) . Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ случаС спСрва ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ 2-ΠΉ элСмСнт Π² массивС y, Π° Π·Π°Ρ‚Π΅ΠΌ 3-ΠΉ элСмСнт Π² ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠΌ массивС.

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ случаС, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ x + 2 , ΠΌΡ‹ сдвигаСмся сразу Π½Π° 2 * sizeof (int ) , Ρ‚. Π΅. Π½Π° 2 * 7 * sizeof (int) . Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ случаС, y + 2 - это сдвиг Π½Π° 2 * sizeof (int *) .

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ случаС (void *)x ΠΈ (void *)*x (ΠΈ (void *)&x !) - это ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ, Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ - это Π½Π΅ Ρ‚Π°ΠΊ.

Π”ΠΎ сих ΠΏΠΎΡ€ ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ с простыми Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… – логичСский (boolean), Ρ†Π΅Π»Ρ‹ΠΉ (integer , word , byte , longint), вСщСствСнный (real), ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ (char). Π›ΡŽΠ±ΠΎΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этих Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… Π±Π°Π·ΠΎΠ²Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ². Но для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΎΠ±Ρ€Π°Π·Π½ΠΎΠΌ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ ΠΌΠΈΡ€Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ Π΄Π°Π½Π½Ρ‹Π΅, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ Π±ΠΎΠ»Π΅Π΅ слоТноС строСниС. Π’Π°ΠΊΠΈΠ΅ слоТныС конструкции, основанныС Π½Π° ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΡ… скалярных Ρ‚ΠΈΠΏΠ°Ρ…, Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ структурами. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° – Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ составной Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…, составлСнный ΠΈΠ· Π±Π°Π·ΠΎΠ²Ρ‹Ρ… скалярных. Если структура Π½Π΅ измСняСт своСго строСния Π½Π° протяТСнии всСго выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½Π° описана, Ρ‚ΠΎ Ρ‚Π°ΠΊΡƒΡŽ структуру Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ статичСской.

Массив – однородная ΡΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ элСмСнтов

Π‘Π°ΠΌΠΎΠΉ распространСнной структурой, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΉ практичСски Π²ΠΎ всСх языках программирования, являСтся массив.

ΠœΠ°ΡΡΠΈΠ²Ρ‹ состоят ΠΈΠ· ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ числа ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ всС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ массива ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ‚ΠΈΠΏ, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° массива всСгда ΠΎΠ΄Π½ΠΎΡ€ΠΎΠ΄Π½Π°. Массив ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠ· элСмСнтов Ρ‚ΠΈΠΏΠ° integer , real ΠΈΠ»ΠΈ char , Π»ΠΈΠ±ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠ΄Π½ΠΎΡ‚ΠΈΠΏΠ½Ρ‹Ρ… элСмСнтов. Из этого, ΠΏΡ€Π°Π²Π΄Π°, Π½Π΅ слСдуСт Π΄Π΅Π»Π°Ρ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ массива ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ скалярный Ρ‚ΠΈΠΏ.

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

ИндСкс массива

НомСр элСмСнта массива называСтся индСксом . ИндСкс – это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ порядкового Ρ‚ΠΈΠΏΠ°, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Ρ‚ΠΈΠΏ индСкса Π΄Π°Π½Π½ΠΎΠ³ΠΎ массива. ΠžΡ‡Π΅Π½ΡŒ часто это цСлочислСнный Ρ‚ΠΈΠΏ (integer , word ΠΈΠ»ΠΈ byte), Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈ логичСский ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ.

ОписаниС массива Π² ПаскалС. Π’ языкС Паскаль Ρ‚ΠΈΠΏ массива задаСтся с использованиСм ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ слова array (Π°Π½Π³Π». – массив), ΠΈ Π΅Π³ΠΎ объявлСниС Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Type < имя _ Ρ‚ΠΈΠΏΠ° >= array [ I ] of T;

Π³Π΄Π΅ I – Ρ‚ΠΈΠΏ индСкса массива, T – Ρ‚ΠΈΠΏ Π΅Π³ΠΎ элСмСнтов.

МоТно ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ сразу ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΠ° массив, Ρ‚.Π΅. Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ описания ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…:

Var a,b: array [ I ] of T;

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Ρ‚ΠΈΠΏ индСкса характСризуСтся Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ любого порядкового Ρ‚ΠΈΠΏΠ°: I 1 .. I n . НапримСр, индСксы ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ 1..20 ΠΈΠ»ΠΈ " a ".." n ".

ΠŸΡ€ΠΈ этом Π΄Π»ΠΈΠ½Ρƒ массива Паскаля Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ΠΈΠ·ΡƒΠ΅Ρ‚ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅:

ord (I n)- ord (I 1)+1.

Π’ΠΎΡ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, объявлСниС Π΄Π²ΡƒΡ… Ρ‚ΠΈΠΏΠΎΠ²: vector Π² Π²ΠΈΠ΄Π΅ массива Паскаля ΠΈΠ· 10 Ρ†Π΅Π»Ρ‹Ρ… чисСл ΠΈ stroka Π² Π²ΠΈΠ΄Π΅ массива ΠΈΠ· 256 символов:

Type
Vector=array of integer;
Stroka=array of char;

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

ОпишСм ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΠ° vector ΠΈ stroka:

ВычислСниС индСкса массива Паскаля

ИндСкс массива Π² ПаскалС Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ Π² явном Π²ΠΈΠ΄Π΅. Π’ качСствС индСкса массива ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΈΠ»ΠΈ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ индСксному Ρ‚ΠΈΠΏΡƒ. Π˜Π½Π°Ρ‡Π΅ говоря, индСксы ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ.

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с ошибкой массива Паскаля

Program primer _ error ;
Type
vector=array of word;
var
n: integer;
a: vector;
begin
n:=45;
a:=25;
end .

Π₯отя данная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ соотвСтствуСт синтаксису языка, ΠΈ транслятор «пропустит» Π΅Π΅, Π½Π° стадии выполнСния ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ ошибка Π²Ρ‹Ρ…ΠΎΠ΄Π° Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ массива Паскаля. ΠŸΡ€ΠΈ n =45 Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ n *2=90, ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ сдСлаСт ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΡƒ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ элСмСнту массива a , Π½ΠΎ Ρ‚Π°ΠΊΠΎΠ³ΠΎ элСмСнта Π½Π΅Ρ‚, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ описан массив Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒΡŽ 80.

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

Из всСго этого слСдуСт ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄: программисту Π½Π°Π΄ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ Π°ΠΊΠΊΡƒΡ€Π°Ρ‚Π½Ρ‹ΠΌ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с индСксами массива.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ дСйствия с массивами Паскаля

Как извСстно, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ области допустимых Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ прСдставлСниС Π² Π­Π’Πœ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Π±ΠΎΡ€ допустимых ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π°Π΄ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ этого Ρ‚ΠΈΠΏΠ°. ΠœΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠ°ΠΊ массив Паскаля. КакиС ΠΆΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π½Π°Π΄ этим Ρ‚ΠΈΠΏΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ…? ЕдинствСнноС дСйствиС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π½Π°Π΄ массивами Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ условии, Ρ‡Ρ‚ΠΎ массивы ΠΎΠ΄Π½ΠΎΡ‚ΠΈΠΏΠ½Ρ‹, – это присваиваниС. Если Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ описаны Π΄Π²Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€,

Var
a , b: array of real ;

Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ a ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ b (a:= b). ΠŸΡ€ΠΈ этом ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ элСмСнту массива a Π±ΡƒΠ΄Π΅Ρ‚ присвоСно ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· массива b . ВсС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ дСйствия Π½Π°Π΄ массивами Паскаля производятся поэлСмСнтно (это Π²Π°ΠΆΠ½ΠΎ!) .

Π’Π²ΠΎΠ΄ массива Паскаля

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ввСсти значСния элСмСнтов массива, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ индСкса, начиная с ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π΄ΠΎ послСднСго, ΠΈ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ элСмСнт. Для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ этих дСйствий ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ» с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ числом ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠΉ, Ρ‚.Π΅. простой арифмСтичСский Ρ†ΠΈΠΊΠ», Π³Π΄Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ Ρ†ΠΈΠΊΠ»Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ пСрСмСнная – индСкс массива Паскаля. ЗначСния элСмСнтов ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Π²Π΅Π΄Π΅Π½Ρ‹ с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΈΠ»ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° присваивания.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π²Π²ΠΎΠ΄Π° массива Паскаля

Var
A: array of integer ;
Begin
For i:=1 to 10 do
Readln (a[i]); { Π²Π²ΠΎΠ΄ i- Π³ΠΎ элСмСнта производится с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ }

Рассмотрим Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ случай, ΠΊΠΎΠ³Π΄Π° массив Паскаля заполняСтся автоматичСски случайными числами, для этого Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ random (N).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ заполнСния массива Паскаля случайными числами

Var
I: byte ; {пСрСмСнная I вводится ΠΊΠ°ΠΊ индСкс массива}
Begin
For i:=1 to 10 do
A [ i ]:= random (10); { i -ΠΌΡƒ элСмСнту массива присваиваСтся «случайноС» Ρ†Π΅Π»ΠΎΠ΅ число Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ ΠΎΡ‚ 0 Π΄ΠΎ 10}

Π’Ρ‹Π²ΠΎΠ΄ массива Паскаля

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π²Ρ‹Π²ΠΎΠ΄Π° массива Паскаля

Var
A: array of integer;
I: byte ; {пСрСмСнная I вводится ΠΊΠ°ΠΊ индСкс массива}
Begin
For i:=1 to 10 do
Write (a [ i ]," "); {Π²Ρ‹Π²ΠΎΠ΄ массива осущСствляСтся Π² строку, послС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта пСчатаСтся ΠΏΡ€ΠΎΠ±Π΅Π»}

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π²Ρ‹Π²ΠΎΠ΄Π° массива Паскаля Π² столбик

Var
A: array of integer;
I: byte ; {пСрСмСнная I вводится ΠΊΠ°ΠΊ индСкс массива}
Begin
For i:=1 to 10 do
Writeln ("a[", i,"]=", a[i]); { Π²Ρ‹Π²ΠΎΠ΄ элСмСнтов массива Π² столбик }

На экранС ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ значСния:

a =2
a =4
a =1 ΠΈ Ρ‚.Π΄.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ΠΈ с использованиСм массивов Паскаля

Π—Π°Π΄Π°Ρ‡Π°: Π΄Π°Π½Ρ‹ Π΄Π²Π° n -ΠΌΠ΅Ρ€Π½Ρ‹Ρ… Π²Π΅ΠΊΡ‚ΠΎΡ€Π°. Найти сумму этих Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ².

РСшСниС Π·Π°Π΄Π°Ρ‡ΠΈ:

  • Π’Ρ…ΠΎΠ΄Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π² этой Π·Π°Π΄Π°Ρ‡Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΡΠ²Π»ΡΡ‚ΡŒΡΡ Π΄Π²Π° ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ… массива. Π Π°Π·ΠΌΠ΅Ρ€ этих массивов ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ, Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ. Π’.Π΅. ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Π·Π°Π²Π΅Π΄ΠΎΠΌΠΎ большой массив, Π° Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, сколько элСмСнтов Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ этих массивов ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ цСлочислСнными. Π’ΠΎΠ³Π΄Π° описаниС Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

    var a , b: array of integer ;

  • Π’Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π±ΡƒΠ΄ΡƒΡ‚ элСмСнты Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ массива, Π½Π°Π·ΠΎΠ²Π΅ΠΌ Π΅Π³ΠΎ c . Π’ΠΈΠΏ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ массива Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ цСлочислСнным.
  • ΠšΡ€ΠΎΠΌΠ΅ Ρ‚Ρ€Π΅Ρ… массивов Π½Π°ΠΌ потрСбуСтся пСрСмСнная – ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ†ΠΈΠΊΠ»Π° ΠΈ индСкс массива, Π½Π°Π·ΠΎΠ²Π΅ΠΌ Π΅Π΅ i , Π° Ρ‚Π°ΠΊΠΆΠ΅ пСрСмСнная n для опрСдСлСния количСства элСмСнтов Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ массивС.

Π₯ΠΎΠ΄ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ΠΈ:

  • ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ количСство элСмСнтов (Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ) массивов, Π²Π²Π΅Π΄Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ n ;
  • Π²Π²Π΅Π΄Π΅ΠΌ массив a ;
  • Π²Π²Π΅Π΄Π΅ΠΌ массив b ;
  • Π² Ρ†ΠΈΠΊΠ»Π΅, пСрСбирая значСния индСкса i ΠΎΡ‚ 1 Π΄ΠΎ n , вычислим ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ значСния элСмСнтов массива c ΠΏΠΎ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π΅:

    c [ i ]= a [ i ]+ b [ i ];

  • Π²Ρ‹Π²Π΅Π΄Π΅ΠΌ Π½Π° экран ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ массив.

ВСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ суммирования Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ²

Program summa;
Var
a, b, c: array of integer;
I, n: byte;
Begin
Write ("Π²Π²Π΅Π΄ΠΈΡ‚Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ массивов:");
Readln(n);
For i:=1 to n do
Readln (a[i]); { ввод массива a}
For i:=1 to n do
Readln (b[i]); { ввод массива b}
For i:=1 to n do
C[i]:=a[i]+b[i]; { вычислСниС суммы массивов }
For i:=1 to n do
write (c[i]," "); { Π²Ρ‹Π²ΠΎΠ΄ массива с }
end.

ΠœΠ°ΡΡΠΈΠ²Ρ‹ Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ ваТная Ρ‚Π΅ΠΌΠ° Π² C++. Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΎΡ‡Π΅Π½ΡŒ часто ΠΈ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² этой Ρ‚Π΅ΠΌΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ досконально. Π‘Ρ€Π°Π·Ρƒ вас ΠΎΠ±Ρ€Π°Π΄ΡƒΡŽ – ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΈ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ массивы достаточно просто Π΄Π°ΠΆΠ΅ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰Π΅ΠΌΡƒ.

Π˜Ρ‚Π°ΠΊ, Π·Π°Ρ‡Π΅ΠΌ ΠΆΠ΅ Π½ΡƒΠΆΠ½Ρ‹ массивы ΠΈ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΈΠ· сСбя ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚? К настоящСму ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ Π²Ρ‹ ΡƒΠΆΠ΅ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ хранятся Π² ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Ρ… Π½Π°ΠΌΠΈ . Но Π±Ρ‹Π²Π°Π΅Ρ‚ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ сотни (Π° Ρ‚ΠΎ ΠΈ большС) ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΎΠ΄Π½ΠΎΡ‚ΠΈΠΏΠ½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ с Π½ΠΈΠΌΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ – ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒ значСния, ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈΡ… ΠΈ Ρ‚.Π΄.

К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Π½Π°Π΄ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ порядковыС Π½ΠΎΠΌΠ΅Ρ€Π° строк. Π‘ΠΎΠ³Π»Π°ΡΠΈΡ‚Π΅ΡΡŒ – Π»ΡŽΠ±ΠΎΠΌΡƒ станСт ΡΡ‚Ρ€Π°ΡˆΠ½ΠΎ ΠΎΡ‚ мысли, Ρ‡Ρ‚ΠΎ Π½Π°Π΄ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΡΡ‚ΡŒΡΠΎΡ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ° int, ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π΄Π°Ρ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ имя ΠΈ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΡ‚ 1-Π³ΠΎ Π΄ΠΎ 500-Ρ‚Π°. (ΠΌΠ½Π΅ ΡƒΠΆΠ΅ ΡΡ‚Ρ€Π°ΡˆΠ½ΠΎ:) Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС, массивы нас просто спасут.

ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ основноС ΠΈ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ практичСскому ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ:

  • массив Π² Π‘++ – это ΡΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ количСства ΠΎΠ΄Π½ΠΎΡ‚ΠΈΠΏΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ… ΠΎΠ΄Π½ΠΎ имя. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, int array ; . Π­Ρ‚Π° запись ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ объявили массив с ΠΈΠΌΠ΅Π½Π΅ΠΌ array , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит Π² сСбС 3 ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΠ° int ;
  • ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ массива Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ элСмСнтами;
  • ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт ΠΈΠΌΠ΅Π΅Ρ‚ свой ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ индСкс – свой порядковый Π½ΠΎΠΌΠ΅Ρ€. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ индСкс ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌΡƒ элСмСнту. Π’ΠΠ–ΠΠž – индСксация элСмСнтов массива начинаСтся с 0 . Π’Π°ΠΊ Π² массивС int array ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт ΠΈΠΌΠ΅Π΅Ρ‚ индСкс 0 , Π° послСдний – 2 . Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊ Π½ΡƒΠ»Π΅Π²ΠΎΠΌΡƒ элСмСнту массива ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π½Π°Π΄ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ имя массива ΠΈ Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобках ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ индСкс элСмСнта – array = 33 .

Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

массивы C++

// Π² этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ создаСм массив с Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ size, // с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ†ΠΈΠΊΠ»Π° for вносим Π΄Π°Π½Π½Ρ‹Π΅ Π²ΠΎ всС ячСйки // массива ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌ ΠΈΡ… содСрТимоС Π½Π° экран #include using namespace std; int main() { setlocale(LC_ALL, "rus"); const int SIZE = 10; //объявляСм константу int firstArray; //объявляСм массив с количСством элСмСнтов SIZE for (int i = 0; i < SIZE ; i++) //заполняСм ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌ значСния Π½Π° экран { firstArray[i] = i + 1; // Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΌ шагС Ρ†ΠΈΠΊΠ»Π° firstArray ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ 1 (0 + 1) cout << i << "-я ячСйка Ρ…Ρ€Π°Π½ΠΈΡ‚ число " << firstArray[i] << endl; } cout << endl; return 0; }

// Π² этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ создаСм массив с Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ size,

// с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ†ΠΈΠΊΠ»Π° for вносим Π΄Π°Π½Π½Ρ‹Π΅ Π²ΠΎ всС ячСйки

// массива ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌ ΠΈΡ… содСрТимоС Π½Π° экран

#include

using namespace std ;

int main ()

setlocale (LC_ALL , "rus" ) ;

const int SIZE = 10 ; //объявляСм константу

int firstArray [ SIZE ] ; //объявляСм массив с количСством элСмСнтов SIZE

for (int i = 0 ; i < SIZE ; i ++ ) //заполняСм ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌ значСния Π½Π° экран

firstArray [ i ] = i + 1 ; // Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΌ шагС Ρ†ΠΈΠΊΠ»Π° firstArray ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ 1 (0 + 1)

cout << i << "-я ячСйка Ρ…Ρ€Π°Π½ΠΈΡ‚ число " << firstArray [ i ] << endl ;

cout << endl ;

return 0 ;

Π’ строкС 12 ΠΌΡ‹ опрСдСляСм Ρ†Π΅Π»ΠΎΡ‡ΠΈΡΠ»Π΅Π½Π½ΡƒΡŽ константу SIZE , которая Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива (ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ΅ Π½Π°ΠΌΠΈ, количСство Π΅Π³ΠΎ элСмСнтов). Π’ строкС 13 объявляСм массив: ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Π² ячСйках массива, Π΄Π°Π΅ΠΌ имя ΠΈ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобках.

Π’Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ†Π΅Π»Ρ‹Π΅ константныС значСния. Надо Π»ΠΈΠ±ΠΎ сразу Π²ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ†Π΅Π»ΠΎΠ΅ число Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки ΠΏΡ€ΠΈ объявлСнии массива (int firstArray; ), Π»ΠΈΠ±ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ†Π΅Π»ΠΎΡ‡ΠΈΡΠ»Π΅Π½Π½ΡƒΡŽ константу Π΄ΠΎ объявлСния массива ΠΈ ввСсти Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки имя этой константы (ΠΊΠ°ΠΊ Π² нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅).

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

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

ΠœΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ Π² нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ внСсти Π»ΡŽΠ±ΡƒΡŽ Π΄Ρ€ΡƒΠ³ΡƒΡŽ Ρ†ΠΈΡ„Ρ€Ρƒ Π² константу SIZE . И Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ прСкрасно Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ – создаст массив Π½Π° ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ элСмСнтов, Π½Π° сколько Π²Ρ‹ ΡƒΠΊΠ°ΠΆΠ΅Ρ‚Π΅, внСсСт Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ ΠΈΡ… Π½Π° экранС.

А Ссли массив совсСм нСбольшой, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ Π½Π° 5 элСмСнтов, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ сразу ΠΏΡ€ΠΈ объявлСнии:

Π’Π°ΠΊ элСмСнту с индСксом 0 – firstArray – Π±ΡƒΠ΄Π΅Ρ‚ присвоСно Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 11 , Π° послСднСму элСмСнту массива firstArray – Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 1 5 . Π•ΡΡ‚ΡŒ такая Ρ„ΠΈΡˆΠΊΠ° – Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобках ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΡƒΡŽ запись:

ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π°Ρ запись эквивалСнтна этой. Волько Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ случаС компилятор автоматичСски вычислит Ρ€Π°Π·ΠΌΠ΅Ρ€ массива, ΠΏΠΎ количСству Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобках.

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

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ такая инициализация Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для заполнСния нулями. Если Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ элСмСнты массива ΠΊΠ°ΠΊΠΈΠΌΠΈ-Π»ΠΈΠ±ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ числами, Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ†ΠΈΠΊΠ». Π’ C++11 (стандарт кодирования) ΠΏΡ€ΠΈ использовании списковой ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ (ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ с Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹ΠΌΠΈ скобками) Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ Π΄Π°ΠΆΠ΅ ΠΎΡ‚Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ Π·Π½Π°ΠΊ = .

Π₯очСтся ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΈΠ΅ΠΌ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΈ создании массива. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, для массива ΠΈΠ· 30-Ρ‚ΠΈ элСмСнтов Π½Π°ΠΌ Π½Π°Π΄ΠΎ внСсти значСния 33 ΠΈ 44 Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ячСйки с индСксом 0 ΠΈ 1 соотвСтствСнно, Π° ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ нулями. Π’ΠΎΠ³Π΄Π° Π΄Π΅Π»Π°Π΅ΠΌ Ρ‚Π°ΠΊ:

эти Π΄Π°Π½Π½Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ внСсСны Π² Π½ΡƒΠ»Π΅Π²ΡƒΡŽ ΠΈ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ячСйки, Π° ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ автоматичСски ΠΏΡ€ΠΈΠΌΡƒΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0 .

ΠžΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ массива ΠΌΠΎΠΆΠ½ΠΎ ΠΈ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° cin :

for (int i = 0; i < size; i++) //заполняСм ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ значСния Π½Π° экран { cout << "Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² ячСйку β„–" << i << " :"; cin >> firstArray[i]; }

for (int i = 0 ; i < size ; i ++ ) //заполняСм ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ значСния Π½Π° экран

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

β€” это Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½Ρ‹ΠΉ участок памяти, содСрТащий ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅ΠΌΡ‹ΠΉ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ.

Массив характСризуСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ основными понятиями:

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ массива (Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ элСмСнта массива) – Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, хранящССся Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ячСйкС памяти, располоТСнной Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… массива, Π° Ρ‚Π°ΠΊΠΆΠ΅ адрСс этой ячСйки памяти.
ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт массива характСризуСтся трСмя Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π°ΠΌΠΈ:

  • адрСсом элСмСнта β€” адрСсом Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ ячСйки памяти, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ располоТСн этот элСмСнт;
  • индСксом элСмСнта (порядковым Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ элСмСнта Π² массивС);
  • Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ элСмСнта.

АдрСс массива – адрСс Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ элСмСнта массива.

Имя массива – ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ для обращСния ΠΊ элСмСнтам массива.

Π Π°Π·ΠΌΠ΅Ρ€ массива – количСство элСмСнтов массива

Π Π°Π·ΠΌΠ΅Ρ€ элСмСнта – количСство Π±Π°ΠΉΡ‚, Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΡ‹Ρ… ΠΎΠ΄Π½ΠΈΠΌ элСмСнтом массива.

ГрафичСски располоТСниС массива Π² памяти ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠΉ Π»Π΅Π½Ρ‚Ρ‹ адрСсов.

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ Π½Π° рисункС массив содСрТит q элСмСнтов с индСксами ΠΎΡ‚ 0 Π΄ΠΎ q-1 . ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Π² памяти ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° k Π±Π°ΠΉΡ‚, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ располоТСниС элСмСнтов Π² памяти ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅.

АдрСса i -Π³ΠΎ элСмСнта массива ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

АдрСс массива прСдставляСт собой адрСс Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ (Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ) элСмСнта массива. Для обращСния ΠΊ элСмСнтам массива ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ порядковый Π½ΠΎΠΌΠ΅Ρ€ (индСкс) элСмСнта, Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ€Π°Π²Π½ΠΎ 0 . Π’Π°ΠΊ, Ссли массив содСрТит q элСмСнтов, Ρ‚ΠΎ индСксы элСмСнтов массива ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΎΡ‚ 0 Π΄ΠΎ q-1 .

Π”Π»ΠΈΠ½Π° массива – количСство Π±Π°ΠΉΡ‚, ΠΎΡ‚Π²ΠΎΠ΄ΠΈΠΌΠΎΠ΅ Π² памяти для хранСния всСх элСмСнтов массива.

Π”Π»ΠΈΠ½Π°ΠœΠ°ΡΡΠΈΠ²Π° = Π Π°Π·ΠΌΠ΅Ρ€Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Π° * ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎΠ­Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΎΠ²

Для опрСдСлСния Ρ€Π°Π·ΠΌΠ΅Ρ€Π° элСмСнта массива ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ функция

int sizeof (Ρ‚ΠΈΠΏ);

НапримСр,

sizeof (char ) = 1;
sizeof (int ) = 4;
sizeof (float ) = 4;
sizeof (double ) = 8;

ОбъявлСниС ΠΈ инициализация массивов

Для объявлСния массива Π² языкС Π‘ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ синтаксис:

Ρ‚ΠΈΠΏ имя[Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ]={инициализация};

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ прСдставляСт собой Π½Π°Π±ΠΎΡ€ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ элСмСнтов массива, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобках, ΠΈ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… запятыми.

int a = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; // массив a ΠΈΠ· 10 Ρ†Π΅Π»Ρ‹Ρ… чисСл

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

int b = {0}; // массив b ΠΈΠ· 10 элСмСнтов, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… 0


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

int a = {1, 2, 3, 4, 5, 6, 7, 8, 9};

ΠŸΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ элСмСнтам массива индСкс Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠ³ΠΎ элСмСнта указываСтся Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобках .

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π½Π° Π‘ΠΈ

1
2
3
4
5
6
7
8

#include
int main()
{
int a = { 5, 4, 3, 2, 1 }; // массив a содСрТит 5 элСмСнтов
printf("%d %d %d %d %d\n" , a, a, a, a, a);
getchar();
return 0;
}

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

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

int a;

Для задания Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ элСмСнтов массива ΠΎΡ‡Π΅Π½ΡŒ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ парамСтричСский Ρ†ΠΈΠΊΠ»:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18


#include
int main()
{
int a;
int i;
// Π’Π²ΠΎΠ΄ элСмСнтов массива
for (i = 0; i<5; i++)
{
printf("a[%d] = " , i);
scanf("%d" , &a[i]);
}
// Π’Ρ‹Π²ΠΎΠ΄ элСмСнтов массива
for (i = 0; i<5; i++)
printf("%d " , a[i]); // ΠΏΡ€ΠΎΠ±Π΅Π» Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ обязатСлСн
getchar(); getchar();
return 0;
}

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

ΠœΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы

Π’ языкС Π‘ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы. ΠžΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠΌ массивС ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ элСмСнта опрСдСляСтся ΠΎΠ΄Π½ΠΈΠΌ индСксом, Π° Π² ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½ΠΎΠΌ - нСсколькими. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива являСтся ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°.

ΠžΠ±Ρ‰Π°Ρ Ρ„ΠΎΡ€ΠΌΠ° объявлСния ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива

Ρ‚ΠΈΠΏ имя[Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ1][Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ2]...[Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒm];

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

int a;


Π±ΡƒΠ΄Π΅Ρ‚ располоТСн Π² памяти ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ

ΠžΠ±Ρ‰Π΅Π΅ количСство элСмСнтов Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠΌ массивС опрСдСлится ΠΊΠ°ΠΊ

ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎΠ‘Ρ‚Ρ€ΠΎΠΊ * ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎΠ‘Ρ‚ΠΎΠ»Π±Ρ†ΠΎΠ² = 2 * 3 = 6.

ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Π±Π°ΠΉΡ‚ памяти, Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Ρ… для размСщСния массива, опрСдСлится ΠΊΠ°ΠΊ

ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎΠ­Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΎΠ² * Π Π°Π·ΠΌΠ΅Ρ€Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Π° = 6 * 4 = 24 Π±Π°ΠΉΡ‚Π°.

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов

ЗначСния элСмСнтов ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива, ΠΊΠ°ΠΊ ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠΌ случаС, ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π΄Π°Π½Ρ‹ константными значСниями ΠΏΡ€ΠΈ объявлСнии, Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΌΠΈ Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки {} . Однако Π² этом случаС ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ количСства элСмСнтов Π² строках ΠΈ столбцах Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобках .

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π½Π° Π‘ΠΈ

1
2
3
4
5
6
7
8
9

#include
int main()
{
int a = { 1, 2, 3, 4, 5, 6 };
printf("%d %d %d\n" , a, a, a);
getchar();
return 0;
}



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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π½Π° Π‘ΠΈ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

#define _CRT_SECURE_NO_WARNINGS
#include
int main()
{
int a; // массив ΠΈΠ· 2 строк ΠΈ 3 столбцов
int i, j;
// Π’Π²ΠΎΠ΄ элСмСнтов массива
for (i = 0; i<2; i++) // Ρ†ΠΈΠΊΠ» ΠΏΠΎ строкам
{
for (j = 0; j<3; j++) // Ρ†ΠΈΠΊΠ» ΠΏΠΎ столбцам
{
printf("a[%d][%d] = " , i, j);
scanf("%d" , &a[i][j]);
}
}
// Π’Ρ‹Π²ΠΎΠ΄ элСмСнтов массива
for (i = 0; i<2; i++) // Ρ†ΠΈΠΊΠ» ΠΏΠΎ строкам
{
for (j = 0; j<3; j++) // Ρ†ΠΈΠΊΠ» ΠΏΠΎ столбцам
{
printf("%d " , a[i][j]);
}
printf("\n" ); // ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ Π½Π° Π½ΠΎΠ²ΡƒΡŽ строку
}
getchar(); getchar();
return 0;
}



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

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ массивов ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ массива Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ

  • адрСс массива,
  • Ρ€Π°Π·ΠΌΠ΅Ρ€ массива.

Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ строк, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ достаточно ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ адрСс.

ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ ΠΊΠΎΠΏΠΈΠΈ. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ссли Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ значСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°, Ρ‚ΠΎ это Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ повлияСт Π½Π° Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Если Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ пСрСдаСтся адрСс ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ (ΠΈΠ»ΠΈ адрСс массива), Ρ‚ΠΎ всС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, выполняСмыС Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, находящимися Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… видимости ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ адрСса, производятся Π½Π°Π΄ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ…, поэтому исходный массив (ΠΈΠ»ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ) ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π½Π° Π‘ΠΈ Π”Π°Π½ массив ΠΈΠ· 10 элСмСнтов. ΠŸΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ мСстами наибольший ΠΈ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ элСмСнты массива. Для ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ поиска максимального элСмСнта ΠΈ ΠΎΠ±ΠΌΠ΅Π½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42

#define _CRT_SECURE_NO_WARNINGS
#include
// Ѐункция ΠΎΠ±ΠΌΠ΅Π½Π°
void change(int *x, int n)
{
// x - ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° массив (адрСс массива)
// n - Ρ€Π°Π·ΠΌΠ΅Ρ€ массива
int i;
int max, index;
max = x;
index = 0;
// Поиск максимального элСмСнта
for (i = 1; i {
if (x[i]>max)
{
max = x[i];
index = i;
}
}
// ОбмСн
x = x;
x = max;
}
// Главная функция
int main()
{
int a;
int i;
for (i = 0; i<10; i++)
{
printf("a[%d] = " , i);
scanf("%d" , &a[i]);
}
change(a, 10); // Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±ΠΌΠ΅Π½Π°
// Π’Ρ‹Π²ΠΎΠ΄ элСмСнтов массива
for (i = 0; i<10; i++)
printf("%d " , a[i]);
getchar();
getchar();
return
p = p * x[i];
}
return p;
}
// Главная функция
int main()
{
int a; // объявлСн массив a ΠΈΠ· 5 элСмСнтов
int i;
int pr;
// Π’Π²ΠΎΠ΄ элСмСнтов массива
for (i = 0; i<5; i++)
{
printf("a[%d] = " , i);
scanf("%d" , &a[i]); // &a[i] - адрСс i-Π³ΠΎ элСмСнта массива
}
pr = func(a, 5); // вычислСниС произвСдСния
printf("\n pr = %d" , pr); // Π²Ρ‹Π²ΠΎΠ΄ произвСдСния Ρ‡Π΅Ρ‚Π½Ρ‹Ρ… элСмСнтов
getchar(); getchar();
return 0;
}



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

Как ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ массивы Π² си?

Как ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ массивы Π² си?

ΠœΠ°ΡΡΠΈΠ²Ρ‹ Π² Π‘ΠΈ для Ρ‡Π°ΠΉΠ½ΠΈΠΊΠΎΠ².

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

Массив Π² Π‘ΠΈ - это Π½Π°Π±ΠΎΡ€ элСмСнтов ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎ индСксу. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ массивов Π² C располоТСны Π΄Ρ€ΡƒΠ³ Π·Π° Π΄Ρ€ΡƒΠ³ΠΎΠΌ Π² памяти ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°.

ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ создания ΠΈ заполнСния массива Π² C:

// @author Subbotin B.P..h> void main(void) { int nArr; nArr = 1; nArr = 2; nArr = 3; printf("\n\tArray\n\n"); printf("nArr\t=\t%d\n", nArr); printf("nArr\t=\t%d\n", nArr); printf("nArr\t=\t%d\n", nArr); return 0; }

ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ:

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ объявляСм массив, содСрТащий элСмСнты Ρ‚ΠΈΠΏΠ° int:

здСсь имя массива nArr, количСство элСмСнтов массива Ρ€Π°Π²Π½ΠΎ Ρ‚Ρ€Ρ‘ΠΌ, Ρ‚ΠΈΠΏ элСмСнтов массива int.

Массив - это Π½Π°Π±ΠΎΡ€ элСмСнтов. К ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ элСмСнту массива ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΏΠΎ Π΅Π³ΠΎ Π½ΠΎΠΌΠ΅Ρ€Ρƒ. НомСр принято Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ индСксом. НумСрация элСмСнтов массива ΠΈΠ΄Ρ‘Ρ‚ с нуля. ΠŸΡ€ΠΈΡΠ²ΠΎΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ элСмСнту массива, Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт ΠΈΠΌΠ΅Π΅Ρ‚ индСкс ноль:

ΠŸΡ€ΠΈΡΠ²ΠΎΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π²Ρ‚ΠΎΡ€ΠΎΠΌΡƒ элСмСнту массива, Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ элСмСнт ΠΈΠΌΠ΅Π΅Ρ‚ индСкс ΠΎΠ΄ΠΈΠ½:

ΠŸΡ€ΠΈΡΠ²ΠΎΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΌΡƒ элСмСнту массива, Π° Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ элСмСнт ΠΈΠΌΠ΅Π΅Ρ‚ индСкс Π΄Π²Π°:

ΠŸΡ€ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π΅ Π½Π° экран элСмСнтов массива ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΈΡ… значСния. Π’ΠΎΡ‚ Ρ‚Π°ΠΊ:

printf("nArr\t=\t%d\n", nArr);

Π§Ρ‚ΠΎΠ± ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ элСмСнт массива, Π½Π°Π΄ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ имя массива ΠΈ индСкс элСмСнта:

это ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт массива, вСдь Ρƒ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ элСмСта индСкс ноль.

ΠŸΡ€ΠΈΡΠ²ΠΎΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ элСмСнта массива ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ int a:

индСкс Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ элСмСнта массива Ρ€Π°Π²Π΅Π½ Π΄Π²ΡƒΠΌ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ отсчёт индСксов Π²Π΅Π΄ΡƒΡ‚ с нуля.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠ±Ρ‰Π΅Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ объявлСния массивов Π² Π‘ΠΈ: ΠΏΡ€ΠΈ объявлСнии массива Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π΅Π³ΠΎ имя, Ρ‚ΠΈΠΏ элСмСнтов, количСство элСмСнтов. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ элСмСнтов Π΅ΡΡ‚ΡŒ Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½ΠΎΠ΅ число, Ρ‚.Π΅. Ρ†Π΅Π»ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅. Ноль Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ количСством элСмСнтов. НСльзя Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ количСство элСмСнтов массива. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ объявлСний массивов Π² C:

int nArr; // ОбъявлСн массив, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ для хранСния ста Ρ†Π΅Π»Ρ‹Ρ… чисСл;
float fArr; // ОбъявлСн массив, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ для хранСния 5-Ρ‚ΠΈ чисСл Ρ‚ΠΈΠΏΠ° float;
char cArr; // ОбъявлСн массив, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ для хранСния Π΄Π²ΡƒΡ… символов;

Ошибкой Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ массив с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ количСством элСмСнтов:

Int varElem;
int nArr; // Ошибка! ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ элСмСнтов нСльзя Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ;

Но ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ количСство элСмСнтов постоянной Π²Π΅Π»ΠΈΡ‡ΠΈΠ½ΠΎΠΉ: ΠΈΠ»ΠΈ нСпосрСдствСнным Ρ†Π΅Π»Ρ‹ΠΌ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ числом 1, 2, 3... ΠΈΠ»ΠΈ константой:

Const int arrayLength = 3;
int nArr;

ΠŸΡ€ΠΈ объявлСнии массива Π² Π‘ΠΈ Π΅Π³ΠΎ сразу ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ:

int nMassiv = {1, 2, 3};

МоТно Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ количСство элСмСнтов массива Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобках, Ссли ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ всС элСмСнты массива:

int nMassiv = {1, 2, 3};

количСство элСмСнтов Π±ΡƒΠ΄Π΅Ρ‚ Π² этом случаС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ автоматичСски.

МоТно ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ лишь Ρ‡Π°ΡΡ‚ΡŒ элСмСнтов массива ΠΏΡ€ΠΈ Π΅Π³ΠΎ объявлСнии:

int nMassiv = {1, 2};

Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Π΄Π²Π° элСмСнта массива ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹, Π° Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ массива символов:

char cArr = {"S", "B", "P"};

ΠŸΡ€ΠΈ объявлСнии массива нСльзя ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ количСство элСмСнтов ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Но ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ элСмСнтам массивов:

Int ind = 0;
char cr = cArr;

Π­Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Ρ†ΠΈΠΊΠ»Π°ΠΌΠΈ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

// @author Subbotin B.P..h> void main(void) { const int arrayLength = 3; int nArr; for(int inn = 0; inn < 3; inn++) { nArr = inn + 1; } printf("\n\tArray\n\n"); for(int inn = 0; inn < 3; inn++) { printf("nArr[%d]\t=\t%d\n", inn, nArr); } return 0; }

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ Ρ†ΠΈΠΊΠ»Π΅ заполняСм массив элСмСнтами Ρ‚ΠΈΠΏΠ° int, Π° Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ Ρ†ΠΈΠΊΠ»Π΅ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ эти элСмСнты Π½Π° экран.