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

Π―Π·Ρ‹ΠΊ C++: 42 — ΠœΠ°ΡΡΠΈΠ²Ρ‹

1. ΠžΡ‚ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅ всС ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Π΅ утвСрТдСния ΠΎ массивах Π² языкС C++.

элСмСнты массива ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ²
всС элСмСнты массива Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°
элСмСнты Π² памяти располоТСны рядом
элСмСнты ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ располоТСны Π² памяти ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ
элСмСнты всСгда Π½ΡƒΠΌΠ΅Ρ€ΡƒΡŽΡ‚ΡΡ с нуля
2. Какой индСкс ΠΈΠΌΠ΅Π΅Ρ‚ послСдний элСмСнт массива

A?

  int A[6];
ΠžΡ‚Π²Π΅Ρ‚:Β 
3. ВрСбуСтся Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ массив ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊ:

   X = [1 3 5 7 9 11]
Какой ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π½Π°Π΄ΠΎ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² Ρ‚Π΅Π»ΠΎ Ρ†ΠΈΠΊΠ»Π° вмСсто многоточия?

  for ( k=0; k<6; k++ ) {
...
}
X[k] = k
X[k] = 2*k
X[k] = 2*k — 1
X[k] = 2*k + 1
X[k] = 2*(k + 1)
4. ВрСбуСтся Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ массив ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊ:

    X = [12 9 6 3 0 -3]
Какой ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π½Π°Π΄ΠΎ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² Ρ‚Π΅Π»ΠΎ Ρ†ΠΈΠΊΠ»Π° вмСсто многоточия?

  for ( k=0; k<6; k++ ) {
...
}
X[k] = k
X[k] = 12 — 2*k
X[k] = 3*k — 12
X[k] = 3*(k + 1) + 9
X[k] = 12 — 3*k
5. ВрСбуСтся Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ массив ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊ:

    X = [0 3 4 7 8 11]
Какой ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π½Π°Π΄ΠΎ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² Ρ‚Π΅Π»ΠΎ Ρ†ΠΈΠΊΠ»Π° вмСсто многоточия?

  for ( k=0; k<6; k++ ) {
...
}
X[k] = 3*k — k % 2
X[k] = 2*k + k % 2
X[k] = 2*k — k % 2
X[k] = 2*k + k / 2
X[k] = 2*(k — 1)
6. ВрСбуСтся Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ массив ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊ:

    X = [1 2 4 8 16 32]
Какой ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π½Π°Π΄ΠΎ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² Ρ‚Π΅Π»ΠΎ Ρ†ΠΈΠΊΠ»Π° вмСсто многоточия?

  X[0] = 1;
for ( k=1; k<6; k++ ) {
. ..
}
X[k] = k
X[k] = 2*k
X[k] = X[k-1] + 1
X[k] = 2*X[k-1]
X[k] = 2*(X[k-1] — 1)
7. Π§Ρ‚ΠΎ Π½Π°Π΄ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ вмСсто многоточия, Ρ‡Ρ‚ΠΎΠ±Ρ‹ вывСсти элСмСнты массива

X[N] Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС? Π’ ΠΎΡ‚Π²Π΅Ρ‚Π΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹.

  for ( k=0; k<N; k++ )
cout << ... << endl;
ΠžΡ‚Π²Π΅Ρ‚:Β 
8. Какой ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π½Π°Π΄ΠΎ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ вмСсто многоточия, Ρ‡Ρ‚ΠΎΠ±Ρ‹ вывСсти Π½Π° экран всС элСмСнты массива

A[N] с Ρ‡Π΅Ρ‚Π½Ρ‹ΠΌΠΈ Π½ΠΎΠΌΠ΅Ρ€Π°ΠΌΠΈ? Π’ ΠΎΡ‚Π²Π΅Ρ‚Π΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹.

  k = 0;
while ( k < N ) {
cout << A[k] << " ";
...
}
ΠžΡ‚Π²Π΅Ρ‚:Β 
9. Π—Π°Π΄Π°Π½ массив

X[N]. Какой ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π½Π°Π΄ΠΎ ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ вмСсто многоточия, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ сумму всСх элСмСнтов массива Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ

S? Π’Π²ΠΎΠ΄ΠΈΡ‚Π΅ ΠΎΡ‚Π²Π΅Ρ‚ Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ².

  S = 0;
for ( k=0 k<N; k++ ) {
...
}
ΠžΡ‚Π²Π΅Ρ‚:Β 
10. Π—Π°Π΄Π°Π½ массив

X[N]. КакоС условиС Π½Π°Π΄ΠΎ ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ вмСсто многоточия, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ сумму ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… элСмСнтов массива Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ

S? Π’Π²ΠΎΠ΄ΠΈΡ‚Π΅ ΠΎΡ‚Π²Π΅Ρ‚ Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ².

  S = 0;
for ( k=0; k<N; k++ )
if ( . . . ) S = S + X[k];
ΠžΡ‚Π²Π΅Ρ‚:Β 
11. Π—Π°Π΄Π°Π½ массив

X[N]. КакоС условиС Π½Π°Π΄ΠΎ ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ вмСсто многоточия, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ количСство Ρ‡Π΅Ρ‚Π½Ρ‹Ρ… элСмСнтов массива Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ

S?

  S = 0;
for ( j=0; j<N; j++ )
if ( ... ) S++;
S / 2 == 1
S % 2 == 0
X[j] % 2 == 1
X[j] % 2 == 0
X[j] / 2 == 0

Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ массив ΠΏΠΎ Π·Π°Π΄Π°Π½ΠΎΠΌΡƒ ΠΏΡ€Π°Π²ΠΈΠ»Ρƒ: Π·ΠΈΠ³Π·Π°Π³ΠΎΠΌ ΠΏΠΎ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ

ВрСбуСтся Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая заполняСт массив размСрности nxn ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡƒ ΠΏΡ€Π°Π²ΠΈΠ»Ρƒ:

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

Π’ΠΎ Π΅ΡΡ‚ΡŒ, Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ массива Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ, свСрху-Π²Π½ΠΈΠ·, слСва-Π½Π°ΠΏΡ€Π°Π²ΠΎ. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΅Ρ‰Π΅ ΠΈ Π·ΠΈΠ³Π·Π°Π³ΠΎΠΎΠ±Ρ€Π°Π·Π½ΠΎΠ΅.

Π‘ΠΌΠΎΡ‚Ρ€ΠΈΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

По ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, массив β€” квадратная ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ количСство строк ΠΈ столбцов. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ это упростит Π·Π°Π΄Π°Ρ‡Ρƒ. Π”Π°ΠΌ подсказку β€” рассмотритС массив ΠΊΠ°ΠΊ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½ΠΎΠΉ систСмС ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚. Π’ΠΎ Π΅ΡΡ‚ΡŒ, для пСрСмСщСния ΠΏΠΎ элСмСнтам ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹, ΠΌΡ‹ условно Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ x ΠΈ y ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹. Ρ…-ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π° β€” пСрСмСнная, которая Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚Π²Π΅Ρ‡Π°Ρ‚ΡŒ Π·Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΏΠΎ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΠΈ (ΠΏΠΎ столбцам),Β 

y-ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π° β€” ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΏΠΎ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΠΈ (ΠΏΠΎ строкам).

Мой способ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ состоит ΠΈΠ· Π΄Π²ΡƒΡ… этапов:

  • Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ‹ массива;
  • Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ‹;

НапримСр,

/*  Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ‹ массива (строки 16 - 44)
      1  3  4 10 11
      2  5  9 12  0
      6  8 13  0  0
      7 14  0  0  0
     15  0  0  0  0  */

Π½ΡƒΒ ΠΈ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΒ ΠΆΠ΅, Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΉ части массива (строки 48 β€” 76):

/*    0  0  0  0  0
      0  0  0  0 19
      0  0  0 18 20
      0  0 17 21 24
      0 16 22 23 25  */

КаТдая Ρ‡Π°ΡΡ‚ΡŒ массива заполняСтся ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ Ρ†ΠΈΠΊΠ»ΠΎΠΌ for, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ ΠΈΠ΄Π΅Ρ‚ ΠΏΠΎ диагоналям. Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π½ΠΎΠ²Ρ‹ΠΉ столбСц β€” это Π½Π°Ρ‡Π°Π»ΠΎ Π½ΠΎΠ²ΠΎΠΉ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ρ†ΠΈΠΊΠ»Ρ‹ for

Β Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒ столбцы, прСдполагая, Ρ‡Ρ‚ΠΎ это Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ. Π’ΠΎ Π΅ΡΡ‚ΡŒ, каТдая пройдСнная итСрация Ρ†ΠΈΠΊΠ»Π° for β€” это заполнСнная диагональ.

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±Ρ‹Π» Π±Ρ‹ Π² Π΄Π²Π° Ρ€Π°Π·Π° мСньшС, Π½ΠΎ Π΄Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π·ΠΈΠ³Π·Π°Π³ΠΎΠΎΠ±Ρ€Π°Π·Π½ΠΎΠ΅ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅. И поэтому, Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ заполняСмой ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ‹ массива, Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π΄Π²Π° случая:

  • Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ снизу-Π²Π²Π΅Ρ€Ρ…Β (для ΠΏΠ΅Ρ€Π²ΠΎΠΉ части β€” строки: 33 -42, Π²Ρ‚ΠΎΡ€ΠΎΠΉ части массива β€” строки: 65 β€” 74)
  • Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ свСрху-Π²Π½ΠΈΠ·Β (для ΠΏΠ΅Ρ€Π²ΠΎΠΉ части β€” строки: 20 -29, Π²Ρ‚ΠΎΡ€ΠΎΠΉ части массива β€” строки:Β 52 β€” 62)

И Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π²Π° способа заполнСния Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»Π΅ΠΉ Ρ‡Π΅Ρ€Π΅Π΄ΠΎΠ²Π°Π»ΠΈΡΡŒ, ΠΌΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Π² строкС 18, для заполнСния ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ‹ массива ΠΈ Π² строкС 50, для заполнСния Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ‹ массива.

НСпосрСдствСнно Π² Ρ†ΠΈΠΊΠ»Π°Ρ… while выполняСтся Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»Π΅ΠΉ. Π’ ΠΊΠΎΠ΄Π΅ оставил ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π², надСюсь объяснил понятно.

#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
    const int colum = 10; // количСство столбцов массива
    const int row   = 10; // количСство строк массива
    int array[100][100];

    int x, y,  // ΠšΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ элСмСнта массива
        value = 1; // Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ заполняСтся массив

    // Π·ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ‹ массива ΠΏΠΎ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ, Π·ΠΈΠ³Π·Π°Π³ΠΎΠΌ, начиная
    // слСва ΠΈ свСрху, заканчивая  ΠΏΠΎΠ±ΠΎΡ‡Π½ΠΎΠΉ диагональю
    for (int diag = 0; diag < colum; diag++) // выполняСм ΠΏΡ€ΠΎΡ…ΠΎΠ΄ ΠΏΠΎ диагоналям
    {
        if (diag % 2 == 0) // ΠΏΠΎ Ρ‡Π΅Ρ‚Π½Ρ‹ΠΌ диагоналям
        {
            x = 0; // Ρ…-ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π° ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π»Π΅ΠΌΠ΅Π½Ρ‚Π° массива Π½Π° Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ - diag
            y = diag; // Ρƒ-ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π° элСмСнта массива Π½Π° Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ - diag

            while (y >= 0) // ΠΏΠΎΠΊΠ° y-ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π° находится Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ части Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ
            {
                array[x][y] = value; // Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² массив
                value++;
                x++;     // ΠΏΠΎ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΠΈ, смСщаСмся Π²Π»Π΅Π²ΠΎ
                y--;    // ΠΏΠΎ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΠΈ, смСщаСмся Π²Π½ΠΈΠ·
            }
        }
        else // ΠΏΠΎ Π½Π΅Ρ‡Π΅Ρ‚Π½Ρ‹ΠΌ диагоналям
        {
            x = diag; // Ρ…-ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π° элСмСнта массива Π½Π° Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ - diag
            y = 0; // Ρƒ-ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π° ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ элСмСнта массива Π½Π° Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ - diag

            while (x >= 0) // ΠΏΠΎΠΊΠ° x-ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π° находится Π² Π»Π΅Π²ΠΎΠΉ части Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ
            {
                array[x][y] = value; // Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² массив
                value++;
                x -= 1;  // ΠΏΠΎ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΠΈ, смСщаСмся Π²ΠΏΡ€Π°Π²ΠΎ
                y +=  1; // ΠΏΠΎ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΠΈ, смСщаСмся Π²Π²Π΅Ρ€Ρ…
            }
        }
    } // ΠΊΠΎΠ½Π΅Ρ† for

    // Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ‹ массива ΠΏΠΎ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ, Π·ΠΈΠ³Π·Π°Π³ΠΎΠΌ, начиная
    // слСва ΠΈ свСрху, заканчивая  послСдним элСмСнтом массива
    for (int diag = 1; diag < colum; diag++)
    {
        if (diag % 2 == 0) // ΠΏΠΎ Ρ‡Π΅Ρ‚Π½Ρ‹ΠΌ диагоналям
        {
            x = 9; // Ρ…-ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π° ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ элСмСнта массива Π½Π° Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ - diag
            y = diag;  // Ρƒ-ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π° элСмСнта массива Π½Π° Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ - diag

            while (y <= 9) // Пока Π½Π΅ ΠΊΠΎΠ½Ρ‡ΠΈΠ»Π°ΡΡŒ диагональ
            {
                array[x][y] = value;
                value++;
                x--; // ΠΏΠΎ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΠΈ, смСщаСмся Π²Π»Π΅Π²ΠΎ
                y++; // ΠΏΠΎ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΠΈ, смСщаСмся Π²Π½ΠΈΠ·
            }
        }
        else // ΠΏΠΎ Π½Π΅ Ρ‡Π΅Ρ‚Π½Ρ‹ΠΌ диагоналям
        {
            x = diag; // Ρ…-ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π° ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ элСмСнта ΠΊ-ΠΎΠΉ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ
            y = 9;  // Ρƒ-ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π° ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ элСмСнта ΠΊ-ΠΎΠΉ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ

            while (x <= 9) // Пока Π½Π΅ ΠΊΠΎΠ½Ρ‡ΠΈΠ»Π°ΡΡŒ диагональ
            {
                array[x][y] = value;
                value++;
                x++; // ΠΏΠΎ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΠΈ, смСщаСмся Π²ΠΏΡ€Π°Π²ΠΎ
                y--; // ΠΏΠΎ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΠΈ, смСщаСмся Π²Π²Π΅Ρ€Ρ…
            }
        } // ΠΊΠΎΠ½Π΅Ρ† if-else
    } // ΠΊΠΎΠ½Π΅Ρ† Ρ†ΠΈΠΊΠ»Π° for (Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ‹ массива)

    // Π²Ρ‹Π²ΠΎΠ΄ масиива Π½Π° экран
    for (int ix = 0; ix < row; ix++)
    {
        for (int jx = 0; jx < colum; jx++)
            cout << setw(4) << array[ix][jx] << " ";
        cout << endl;
    }

    return 0;
}

Π‘ΠΊΠΎΡ€Π΅Π΅ всСго ΠΌΠΎΠΉ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ, ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π² 2 Ρ€Π°Π·Π°, Π½ΠΎ Ρƒ мСня с Ρ…ΠΎΠ΄Ρƒ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ оставил всС Ρ‚Π°ΠΊ. Если Ρƒ вас получится ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ исходный ΠΊΠΎΠ΄ ΠΈΠ»ΠΈ Π½Π°ΠΉΡ‚ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚Π΅ΡΡŒ с читатСлями нашСго сайта. Ах Π΄Π°, я Π·Π°Π±Ρ‹Π» Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π²Π²ΠΎΠ΄ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° массива, Π½ΠΎ я Π΄ΡƒΠΌΠ°ΡŽ это Ρƒ вас получится ΠΈ Π±Π΅Π· мСня. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

Как Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ массив

ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ вопрос ΠΎ массивС

Π°Π²Ρ‚ΠΎΡ€: Π΄Π΅ΠΊΠΎ | послСднСС сообщСниС ΠΎΡ‚:

Π― ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ Ρ†ΠΈΠΊΠ» For Each… Next ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ varFnm Π² массивС («Π­Ρ‚ΠΎ», «Π­Ρ‚ΠΎ», «Π”Ρ€ΡƒΠ³ΠΎΠ΅», «Π€Ρƒ», «Π‘Π°Ρ€») RunSql («ΠžΠ‘ΠΠžΠ’Π›Π•ΠΠ˜Π•…. Π±Π»Π°-Π±Π»Π°-Π±Π»Π°») Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Но Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ ΠΆΠ΅ элСмСнты массива…

Microsoft Access/VBA

Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ массив

Π°Π²Ρ‚ΠΎΡ€: Анил | послСднСС сообщСниС ΠΎΡ‚:

ВсСм ΠΏΡ€ΠΈΠ²Π΅Ρ‚, Π£ мСня Π΅ΡΡ‚ΡŒ строка с названиями ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ², Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ запятыми. количСство ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ² Π² строкС случайно. Π― Ρ…ΠΎΡ‡Ρƒ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ массив, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ строку, ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ Π½Π°…

C# / C Sharp

Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ массив ΠΈΠ· тСкстового Ρ„Π°ΠΉΠ»Π° — ΠΏΠΎΠΌΠΎΡ‰ΡŒ

Π°Π²Ρ‚ΠΎΡ€: ΠœΠ°Ρ€ΡΠ΅Π»ΠΎ | послСднСС сообщСниС ΠΎΡ‚:

ΠŸΡ€ΠΈΠ²Π΅Ρ‚, Π― Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅, ΠΈ Ρ…ΠΎΡ‚Π΅Π» Π±Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΠ»ΠΈ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ я ΠΌΠΎΠ³ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ этого Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: Π£ мСня Π΅ΡΡ‚ΡŒ тСкстовый Ρ„Π°ΠΉΠ» Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅: 12345 54321 98765 56789 (3 мСста. ..

.NET Framework

Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ массив ΠΈΠ· XML

Π°Π²Ρ‚ΠΎΡ€: Π¨ΠΎΠ½ | послСднСС сообщСниС ΠΎΡ‚:

ΠŸΡ€ΠΈΠ²Π΅Ρ‚. Π£ мСня Π΅ΡΡ‚ΡŒ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив. МоТно Π»ΠΈ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ xml? Бпасибо, Π¨ΠΎΠ½

ASP.NET

Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ массив ΠΈΠ· Ρ„Π°ΠΉΠ»Π° с раздСлитСлями?

Π°Π²Ρ‚ΠΎΡ€: Π“Π°ΠΉ Π‘Π»ΡƒΠΌΡ„ΠΈΠ»Π΄ | послСднСС сообщСниС ΠΎΡ‚:

ΠšΡ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π·Π½Π°Π΅Ρ‚ простой способ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ массив ΠΈΠ· тСкстового Ρ„Π°ΠΉΠ»Π° с раздСлитСлями, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π·Π°Ρ€Π°Π½Π΅Π΅ Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅ количСство столбцов? Π― пытался вСсь дСнь ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡŽ…

Visual Basic .NET

Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ массив Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ sql vb.net

Π°Π²Ρ‚ΠΎΡ€: Π¨Π°Ρ€ΠΎΠ½ | послСднСС сообщСниС ΠΎΡ‚:

ΠΏΡ€ΠΈΠ²Π΅Ρ‚, Π― Ρ…ΠΎΡ‚Π΅Π» Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ массив Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ sql, Π½ΠΎ Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½, ΠΊΠ°ΠΊ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ. Π­Ρ‚ΠΎ массив, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ Π² настоящСС врСмя, Π½ΠΎ я Π½Π΅ Ρ…ΠΎΡ‡Ρƒ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ цСнности. ВмСсто этого я. ..

ASP.NET

Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ массив с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ раздСлСния.

Π°Π²Ρ‚ΠΎΡ€: ΠšΠ΅Π»ΠΈΠΊΡƒΠ»Π° | послСднСС сообщСниС ΠΎΡ‚:

ВсСм здравствуйтС. Π£ мСня Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, которая, каТСтся, Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ смысла для мСня. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, я, Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ, дСлаю Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½Π΅ Ρ‚Π°ΠΊ. Π― ΠΏΡ‹Ρ‚Π°ΡŽΡΡŒ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ массив, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ с рСгулярным Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ. Π’ΠΎΡ‚ ΠΊΠΎΠ΄ (Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚…

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ обучСния администраторов WebLogic?

Π°Π²Ρ‚ΠΎΡ€: ΠΠ°Ρ€Π΅Ρˆ2 | послСднСС сообщСниС ΠΎΡ‚:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ администраторов WebLogic? WebLogic Admin Training β€” это спСциализированная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, прСдназначСнная для обучСния людСй Π½Π°Π²Ρ‹ΠΊΠ°ΠΌ ΠΈ знаниям, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌ для эффСктивного администрирования ΠΈ управлСния Oracle…

Π‘Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… Oracle

ΠΏΡ€ΠΈΠ²Π΅Ρ‚

Π°Π²Ρ‚ΠΎΡ€: WisdomUfot | послСднСС сообщСниС ΠΎΡ‚:

Π£ вас Π΅ΡΡ‚ΡŒ интСрСсный вопрос ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Gmail скрываСт Ρ€Π΅Ρ„Π΅Ρ€Π΅Ρ€ HTTP ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ Π½Π° ссылку Π² элСктронном письмС. Π₯отя Ρƒ мСня Π½Π΅Ρ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… тСхничСских Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ, Gmail, вСроятно, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΠΌΠ΅Ρ€Ρ‹… 9ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ с .click() Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ Safari

Π°Π²Ρ‚ΠΎΡ€: Π”ΠΈΠ·Π΅Π»ΡŒΠΡ€Ρ | послСднСС сообщСниС ΠΎΡ‚:

ВсСм ΠΏΡ€ΠΈΠ²Π΅Ρ‚) Бтолкнулся с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ, событиС element.click() Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ Safari. ΠŸΡ€ΠΎΠ±ΠΎΠ²Π°Π» Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ‚Ρ€ΡŽΠΊΠΈ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ эмуляция события касания Ρ‡Π΅Ρ€Π΅Π· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ: ΠΏΡƒΡΡ‚ΡŒ clickEvent = Π½ΠΎΠ²ΠΎΠ΅ событиС(‘Ρ‰Π΅Π»Ρ‡ΠΎΠΊ’, {…

Javascript

Доступ β€” история для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ

Π°Π²Ρ‚ΠΎΡ€: F22F35 | послСднСС сообщСниС ΠΎΡ‚:

Π― Π½ΠΎΠ²ΠΈΡ‡ΠΎΠΊ Π² Access (Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π² этом ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ). МнС Π½ΡƒΠΆΠ½Π° ΠΏΠΎΠΌΠΎΡ‰ΡŒ Π² создании Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Access, которая Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. НапримСр, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½ ΡƒΡ€ΠΎΠΊ 1…

Microsoft Access/VBA

ДинамичСский массив Π² C β€” Ρ‚Π΅ΠΌΡ‹ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ

Abstract

ДинамичСскиС массивы β€” ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ структуры Π΄Π°Π½Π½Ρ‹Ρ…. Π˜Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Π²ΠΎ врСмя выполнСния. Π­Ρ‚ΠΎΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠΎΠ·ΠΆΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ (ΠΈΠ»ΠΈ) ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ массив. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ массивов фиксированного Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΈ массивов ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹, массивы динамичСского Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² ΠΊΡƒΡ‡Π΅. Π“ΠΈΠ±ΠΊΠΈΠ΅ Ρ‡Π»Π΅Π½Ρ‹ массива ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠΈ Π½Π° массивы динамичСского Ρ€Π°Π·ΠΌΠ΅Ρ€Π°. Они ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² структурах ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Ρ‡Π»Π΅Π½ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Π°ΠΊΠΈΠ΅ ΠΆΠ΅ свойства, ΠΊΠ°ΠΊ ΠΈ массивы с динамичСским Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ.

Π‘Ρ„Π΅Ρ€Π° примСнСния ΡΡ‚Π°Ρ‚ΡŒΠΈ

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

ΠœΠ°ΡΡΠΈΠ²Ρ‹ фиксированной Π΄Π»ΠΈΠ½Ρ‹

ΠœΠ°ΡΡΠΈΠ²Ρ‹ фиксированной Π΄Π»ΠΈΠ½Ρ‹, ΠΊΠ°ΠΊ слСдуСт ΠΈΠ· названия, ΠΈΡ… Ρ€Π°Π·ΠΌΠ΅Ρ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ константой Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ компиляции. Π•Π³ΠΎ нСльзя ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π’ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… случаях ΠΎΠ½ΠΈ Π½Π΅ ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹. Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ массив ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ². ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ массив максимально Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, Π½ΠΎ это Π±ΡƒΠ΄Π΅Ρ‚ пустой Ρ‚Ρ€Π°Ρ‚ΠΎΠΉ памяти. VLA Ρ€Π΅ΡˆΠ°Π΅Ρ‚ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, принимая Ρ€Π°Π·ΠΌΠ΅Ρ€ срСды выполнСния для массивов.

ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ (VLA) Π² C

ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ β€” это массивы, Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… опрСдСляСтся Π²ΠΎ врСмя выполнСния (Π½ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ послС ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ). Π’ΠΏΠ΅Ρ€Π²Ρ‹Π΅ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ Π²Π²Π΅Π΄Π΅Π½Ρ‹ Π² C ΠΏΠΎ стандарту C99. Но Π² Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½ΠΈΡ… вСрсиях это стало Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ. Они Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Π»ΠΈΡΡŒ Π² стСкС ΠΈ освобоТдались, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠΊΠΈΠ΄Π°Π»ΠΈ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости (ΠΊΠ°ΠΊ ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ массивы).

  • Π’ массивах фиксированной Π΄Π»ΠΈΠ½Ρ‹ n Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ константой Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ компиляции, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ здСсь n основано Π½Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ Π²Π²ΠΎΠ΄Π΅.

Π˜Ρ‚Π°ΠΊ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΈΠΌΠ΅Π½Π½ΠΎ использованиС VLA Π½Π΅ рСкомСндуСтся?

НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ VLA ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ с динамичСским Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ, Ρ€Π°Π·ΠΌΠ΅Ρ€ нСльзя ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ послС ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. НС сущСствуСт простого способа ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π»ΠΈ распрСдСлСн VLA. Если Ρ€Π°Π·ΠΌΠ΅Ρ€ слишком Π²Π΅Π»ΠΈΠΊ, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° останавливаСтся с ошибкой сСгмСнтации. Они Ρ‚Π°ΠΊΠΆΠ΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ Π³ΠΎΡ€Π°Π·Π΄ΠΎ большС ассСмблСрного ΠΊΠΎΠ΄Π° ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, Ρ‡Π΅ΠΌ статичСскиС массивы (фиксированного Ρ€Π°Π·ΠΌΠ΅Ρ€Π°).

Π•ΡΡ‚ΡŒ нСсколько ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π½Π° использованиС VLA. VLA Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ:

  • внСшний
  • Ρ‡Π»Π΅Π½ΠΎΠ² структуры
  • статичСский
  • объявлСно с Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ Π³Ρ€Π°Π½ΠΈΡ†Π°ΠΌΠΈ

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² динамичСскиС массивы

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… языков высокого уровня (Python, JavaScript ΠΈ Ρ‚. Π΄.), C Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ встроСнных динамичСских массивов. Но ΠΎΠ½ прСдоставляСт способ взаимодСйствия с Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ (Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, ΡΡ‚Ρ€Π΅Π»ΡΡ‚ΡŒ Π² Π½ΠΎΠ³Ρƒ).

ДинамичСскиС массивы ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ доступ ΠΊ своим элСмСнтам. Π˜Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ, Π° ΠΈΡ… Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠΎΠ·ΠΆΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. ДинамичСскиС массивы Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² ΠΊΡƒΡ‡Π΅, Π° VLA β€” Π² стСкС.

Π’Π°ΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ VLA β€” это Π½Π΅ Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ динамичСскиС массивы. НСкоторыС ΠΈΠ· ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΉ:

  • ΠžΠ±Π»Π°ΡΡ‚ΡŒ дСйствия: VLA Π²Π΅Π΄ΡƒΡ‚ сСбя ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ массивы ΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹ ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ дСйствия. ДинамичСскиС массивы ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² любом мСстС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, нСзависимо ΠΎΡ‚ области видимости, Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½Π° функция free().
  • РаспрСдСлСниС: VLA Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² стСкС, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ динамичСскиС массивы Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² ΠΊΡƒΡ‡Π΅. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, VLA быстрСС, Ρ‡Π΅ΠΌ динамичСская ΠΏΠ°ΠΌΡΡ‚ΡŒ. Π’Π°ΠΊ ΠΊΠ°ΠΊ компилятор Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡ‡ΠΈΡ‰Π°Ρ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ (для динамичСского массива) послС использования.
  • ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ: ΠœΠ°ΡΡΠΈΠ²Ρ‹ динамичСского Ρ€Π°Π·ΠΌΠ΅Ρ€Π° часто Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ приходится Π²Ρ‹Π΄Π΅Π»ΡΡ‚ΡŒ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Ρ‚ΡŒ Π΅Π΅ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ. Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния пространства массивы динамичСского Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ/ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ VLA. НСкоторыС тСсты ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ здСсь.

Building Blocks

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ нСсколько Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ C, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ malloc, free, calloc, realloc, reallocarray, для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ массивов динамичСского Ρ€Π°Π·ΠΌΠ΅Ρ€Π°.

  • malloc: ΠŸΡ€ΠΎΡ‰Π΅ говоря, Π²Ρ‹Π·ΠΎΠ² этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ эквивалСнтСн запросу ОБ Π½Π° Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ n Π±Π°ΠΉΡ‚ΠΎΠ². Если Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти ΠΏΡ€ΠΎΡˆΠ»ΠΎ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, malloc Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π±Π»ΠΎΠΊ памяти. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΎΠ½ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ NULL. malloc относится ΠΊ Β«Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΡŽ памяти».

использованиС malloc

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π΅ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ malloc для создания n Π±Π°ΠΉΡ‚ΠΎΠ² памяти ΠΈ назначСния ΠΈΡ… ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ p. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌΠΈ Π½ΠΈΠΆΠ΅ Ρ„Π»Π°Π³Π°ΠΌΠΈ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ Π²Ρ‹Π΄Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ. Π’ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½Π΅ Ρ‚Π°ΠΊ сдСлано. ΠœΡ‹ Π½Π΅ освободили ΠΏΠ°ΠΌΡΡ‚ΡŒ .

  • Доступ ΠΊ элСмСнтам массива: Π’ C Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ 1 ΠΊ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ p ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ адрСс указатСля Π½Π° sizeof(pType), Π³Π΄Π΅ pType β€” это Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ p. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ это, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ i-ΠΌ элСмСнтам, Π΄ΠΎΠ±Π°Π²ΠΈΠ² i ΠΊ Π±Π°Π·ΠΎΠ²ΠΎΠΌΡƒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ. Π”Π°Π²Π°ΠΉΡ‚Π΅ обсудим это Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ (посмотритС Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½ΠΈΠΆΠ΅).

    • a β€” массив с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой. ΠŸΠΎΠ½ΡΡ‚Π½ΠΎ, Ρ‡Ρ‚ΠΎ a[0] являСтся Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ для этого массива.
    • ptr Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° &a, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π½Π° Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ.
    • ptr++ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ sizeof(float) bytes, Ρ‚. Π΅. 4 Π±Π°ΠΉΡ‚Π° ΠΊ ptr.
    • Π˜Ρ‚Π°ΠΊ, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ptr ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ элСмСнт массива, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π½Π° a[1]. Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, добавляя ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ i ΠΊ ptr, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π»ΡŽΠ±ΠΎΠΌΡƒ элСмСнту Π² этом массивС. НапримСр: *(ptr + i) = a[i].
  • calloc: Π­Ρ‚Π° функция выдСляСт Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½Ρ‹ΠΉ Π±Π»ΠΎΠΊ памяти Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π±Π»ΠΎΠΊ Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ. Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ malloc выдСляСт ΠΎΠ΄ΠΈΠ½ Π±Π»ΠΎΠΊ памяти, Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ мСстС являСтся случайным. calloc выдСляСт ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈ обнуляСт Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈ. calloc относится ΠΊ Β«Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠΌΡƒ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽΒ»

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π΅Ρ‰Π΅ нСсколько ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΉ:-

  • calloc ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Π²Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ malloc ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½. nmemb прСдставляСт количСство Π±Π»ΠΎΠΊΠΎΠ² памяти . size прСдставляСт Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° . Π­Ρ‚ΠΎ большС ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для выдСлСния памяти ΠΏΠΎΠ΄ массивы.

  • malloc выдСляСт ΠΏΠ°ΠΌΡΡ‚ΡŒ сразу Π² ΠΎΠ΄Π½ΠΎΠΌ Π±Π»ΠΎΠΊΠ΅, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ calloc выдСляСт ΠΏΠ°ΠΌΡΡ‚ΡŒ нСсколькими Π±Π»ΠΎΠΊΠ°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½Ρ‹ΠΌΠΈ .

  • ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π½Π΅ просто 0. Если ΠΌΡ‹ выдСляСм массив структур, calloc присваиваСт NULL строкам, 0 β€” Ρ†Π΅Π»Ρ‹ΠΌ числам/ΠΏΠ»Π°Π²Π°ΡŽΡ‰ΠΈΠΌ числам ΠΈ Ρ‚. Π΄.

  • свободно: Π­Ρ‚Π° функция освобоТдаСт Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ. Π’Ρ‹Π·ΠΎΠ² free(p) нСпосрСдствСнно ΠΏΠ΅Ρ€Π΅Π΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΎΠΌ Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π΅ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΠ» Π±Ρ‹ ΠΎΡˆΠΈΠ±ΠΊΡƒ. free Π”ΠžΠ›Π–Π•Π Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ явно послС использования динамичСской памяти, нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, какая функция ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Π΅Π΅ создания (malloc, calloc ΠΈ Ρ‚. Π΄.)

Π“ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ дСшСво. ПокаТи ΠΌΠ½Π΅ Код.

Π’Ρ‹Ρ…ΠΎΠ΄

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим это ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅.

  • calloc создал ΠΏΠ°ΠΌΡΡ‚ΡŒ для n Ρ†Π΅Π»Ρ‹Ρ… чисСл, Π³Π΄Π΅ n вводится ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ.
  • arr содСрТит адрСс созданной памяти. ΠœΡ‹ провСряСм, ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π»ΠΈ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅, ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΠΌ ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ссли это Π½Π΅ Ρ‚Π°ΠΊ.
  • Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ†ΠΈΠΊΠ»Π΅ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅ΠΌ массив Π½Π° ΠΎΠ΄ΠΈΠ½ элСмСнт Π²Π»Π΅Π²ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ послСдний элСмСнт. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ синтаксис, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ массиву, для ссылки Π½Π° элСмСнты массива.
  • Π’Ρ‹Π·ΠΎΠ² realloc ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ» Ρ€Π°Π·ΠΌΠ΅Ρ€ памяти Π΄ΠΎ (n — 1) Π±Π°ΠΉΡ‚.
  • Π’Ρ‹Π·ΠΎΠ²ΠΎΠΌ free ΠΌΡ‹ освободили ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ с Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΎΠΌ 0;.

Π“ΠΈΠ±ΠΊΠΈΠ΅ элСмСнты массива (FAM)

FAM β€” элСмСнт Π΄Π°Π½Π½Ρ‹Ρ… массива, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ массив Π±Π΅Π· ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ. Π Π°Π·ΠΌΠ΅Ρ€ FAM составляСт Π³ΠΈΠ±ΠΊΠΈΡ… ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ malloc, calloc ΠΈ Ρ‚. Π΄. (Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ динамичСскиС массивы).

Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ стандартизировано Π² C99 вмСстС с VLA. Π•ΡΡ‚ΡŒ нСсколько ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π½Π° использованиС FAM: —

  • Π”ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ хотя Π±Ρ‹ ΠΎΠ΄ΠΈΠ½ Π΄Ρ€ΡƒΠ³ΠΎΠΉ элСмСнт Π΄Π°Π½Π½Ρ‹Ρ….
  • Π“ΠΈΠ±ΠΊΠΈΠΉ Ρ‡Π»Π΅Π½ массива Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ объявлСн Π² ΠΊΠΎΠ½Ρ†Π΅ структуры.
  • Π’ структурС ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ FMA (это ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· Ρ‚ΠΎΠ³ΠΎ Ρ„Π°ΠΊΡ‚Π°, Ρ‡Ρ‚ΠΎ Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ‡Π»Π΅Π½).

Π Π°Π·ΠΌΠ΅Ρ€ массива ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π²ΠΎ врСмя создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΠ· структуры.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ элСмСнта Π³ΠΈΠ±ΠΊΠΎΠ³ΠΎ массива

Π’Ρ‹Π²ΠΎΠ΄

  • ΠŸΡ€ΠΈ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠΈ памяти с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ malloc ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ n * sizeof(int) Π±Π°ΠΉΡ‚. Π­Ρ‚Π° ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ элСмСнтом Π΄Π°Π½Π½Ρ‹Ρ… arr структуры, Π° Ρ‚Π°ΠΊΠΆΠ΅ опрСдСляСт Ρ€Π°Π·ΠΌΠ΅Ρ€ элСмСнта массива Flexible (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС arr).
  • Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ динамичСскиС массивы Π² структурах.

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

ΠžΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

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

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