ОбъявлСниС Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ динамичСского массива c. ДинамичСский Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив с ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π° ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, объСм памяти, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ для Ρ‚ΠΎΠΉ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, задаСтся Π΅Ρ‰Π΅ Π΄ΠΎ процСсса компиляции посрСдством объявлСния этой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Если ΠΆΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π² созданиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ нСизвСстСн Π·Π°Ρ€Π°Π½Π΅Π΅, Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ. Π Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ освобоТдСниС памяти Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… Π½Π° C++ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π² любой ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. ΠžΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ распрСдСлСния памяти двумя способами:

  • с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ malloc , calloc , realloc ΠΈ free;
  • посрСдством ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° new ΠΈ delete .

Ѐункция malloc Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½Ρ‹ΠΉ Π±Π»ΠΎΠΊ ячССк памяти для хранСния ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΏΠ΅Ρ€Π²ΡƒΡŽ ячСйку этого Π±Π»ΠΎΠΊΠ°. ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΈΠ΄:

void *malloc(size);

Π—Π΄Π΅ΡΡŒ size - Ρ†Π΅Π»ΠΎΠ΅ Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π΅Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ выдСляСмого участка памяти Π² Π±Π°ΠΉΡ‚Π°Ρ…. Если Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ памяти ΠΏΡ€ΠΎΡˆΠ»ΠΎ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, Ρ‚ΠΎ функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‚ΠΈΠΏΠ° void * , ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ привСсти ΠΊ Π»ΡŽΠ±ΠΎΠΌΡƒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ указатСля.

Ѐункция - calloc Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для выдСлСния памяти. Π—Π°ΠΏΠΈΡΡŒ Π½ΠΈΠΆΠ΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΎ num элСмСнтов ΠΏΠΎ size Π±Π°ΠΉΡ‚.

void *calloc (nime, size);

Π­Ρ‚Π° функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ участок ΠΈΠ»ΠΈ NULL ΠΏΡ€ΠΈ нСвозмоТности Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ. ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ являСтся ΠΎΠ±Π½ΡƒΠ»Π΅Π½ΠΈΠ΅ всСх Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… элСмСнтов.

Ѐункция realloc измСняСт Ρ€Π°Π·ΠΌΠ΅Ρ€ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Ρ€Π°Π½Π΅Π΅ памяти. ΠžΠ±Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ ΠΊ Π½Π΅ΠΉ Ρ‚Π°ΠΊ:

char *realloc (void *p, size);

Π—Π΄Π΅ΡΡŒ p - ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти, Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π° size . Если Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ мСняСтся адрСс области памяти, Ρ‚ΠΎ Π½ΠΎΠ²Ρ‹ΠΉ адрСс вСрнСтся Π² качСствС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°. Если фактичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° NULL , Ρ‚ΠΎ функция realloc Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ функция malloc , Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ выдСляСт участок памяти Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ size Π±Π°ΠΉΡ‚.

Для освобоТдСния Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ памяти ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ функция free . ΠžΠ±Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ ΠΊ Π½Π΅ΠΉ Ρ‚Π°ΠΊ:

void free (void *p size);

Π—Π΄Π΅ΡΡŒ p - ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° участок памяти, Ρ€Π°Π½Π΅Π΅ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ функциями malloc , calloc ΠΈΠ»ΠΈ realloc .

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ new ΠΈ delete Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ функциям malloc ΠΈ free . New выдСляСт ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π° Π΅Π³ΠΎ СдинствСнный Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ - это Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π΅Π΅ количСство Π±Π°ΠΉΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π½Π°Ρ‡Π°Π»ΠΎ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° памяти. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ delete освобоТдаСт ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π΅Π³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ - адрСс ΠΏΠ΅Ρ€Π²ΠΎΠΉ ячСйки Π±Π»ΠΎΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ.

ДинамичСский массив - массив ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹, ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΏΠΎΠ΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выдСляСтся Π² процСссС выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти осущСствляСтся функциями calloc, malloc ΠΈΠ»ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ new . АдрСс ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ элСмСнта Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ участка памяти хранится Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, объявлСнной ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ. НапримСр, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ описан ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ mas ΠΈ Π΅ΠΌΡƒ присвоСн адрСс Π½Π°Ρ‡Π°Π»Π° Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠΉ области динамичСской памяти, Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° new :

int *mas=new int;

Π’Ρ‹Π΄Π΅Π»Π΅Π½ΠΎ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ памяти, сколько Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ для хранСния 10 Π²Π΅Π»ΠΈΡ‡ΠΈΠ½ Ρ‚ΠΈΠΏΠ° int.

ЀактичСски, Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ mas хранится адрСс Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ элСмСнта динамичСского массива. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, адрСс ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ, ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ элСмСнта, Π² Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ участкС памяти - mas +1, Π° mas +i являСтся адрСсом i-Π³ΠΎ элСмСнта. ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ i-ΠΌΡƒ элСмСнту динамичСского массива ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ mas[i], ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌ способом *(mas +i ) . Π’Π°ΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π²Ρ‹ΠΉΡ‚ΠΈ Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ участка памяти.

Когда динамичСский массив (Π² любой ΠΌΠΎΠΌΠ΅Π½Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹) пСрСстаСт Π±Ρ‹Ρ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹ΠΌ, Ρ‚ΠΎ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ free ΠΈΠ»ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° delete .

ΠŸΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ нСсколько Π·Π°Π΄Π°Ρ‡, Π·Π°ΠΊΡ€Π΅ΠΏΠ»ΡΡŽΡ‰ΠΈΡ… Π΄Π°Π½Π½Ρ‹ΠΉ ΡƒΡ€ΠΎΠΊ:

Π—Π°Π΄Π°Ρ‡Π° 1

Найти сумму вСщСствСнных элСмСнтов динамичСского массива.

//ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ malloc ΠΈ free #include "stdafx.h" #include using namespace std; int main() { setlocale(LC_ALL,"Rus"); int i, n; float *a; //ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° float float s; cout<<"\n"; cin>>n; //Π²Π²ΠΎΠ΄ размСрности массива //Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти ΠΏΠΎΠ΄ массив ΠΈΠ· n вСщСствСнных элСмСнтов a=(float *)malloc(n*sizeof(float)); cout<<"Π’Π²Π΅Π΄ΠΈΡ‚Π΅ массив A \n"; //Π²Π²ΠΎΠ΄ элСмСнтов массива for (i=0; i>*(a+i); } //Π½Π°ΠΊΠ°ΠΏΠ»ΠΈΠ²Π°Π½ΠΈΠ΅ суммы элСмСнтов массива for (s=0, i=0; i

//ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ malloc ΠΈ free

#include "stdafx.h"

#include

using namespace std ;

int main ()

int i , n ;

float * a ; //ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° float

float s ;

cout << "\n" ; cin >> n ; //Π²Π²ΠΎΠ΄ размСрности массива

//Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти ΠΏΠΎΠ΄ массив ΠΈΠ· n вСщСствСнных элСмСнтов

a = (float * ) malloc (n * sizeof (float ) ) ;

cout << "Π’Π²Π΅Π΄ΠΈΡ‚Π΅ массив A \n" ;

//Π²Π²ΠΎΠ΄ элСмСнтов массива

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

cin >> * (a + i ) ;

//Π½Π°ΠΊΠ°ΠΏΠ»ΠΈΠ²Π°Π½ΠΈΠ΅ суммы элСмСнтов массива

for (s = 0 , i = 0 ; i < n ; i ++ )

s += * (a + i ) ;

//Π²Ρ‹Π²ΠΎΠ΄ значСния суммы

cout << "S=" << s << "\n" ;

//освобоТдСниС памяти

free (a ) ;

system ("pause" ) ;

return 0 ;

Π—Π°Π΄Π°Ρ‡Π° 2

Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ динамичСский массив Ρ†Π΅Π»Ρ‹Ρ… чисСл Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΅Π³ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ элСмСнты стали ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚. Для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΡƒΠΌΠ½ΠΎΠΆΠ°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт Π½Π° -1.

//ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² new ΠΈ delete #include "stdafx.h" #include using namespace std; int main() { setlocale(LC_ALL,"Rus"); int i, n; //Π²Π²ΠΎΠ΄ количСства элСмСнтов массива cout<<"n="; cin>>n; //Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти int *a=new int[n]; cout<<"Π’Π²Π΅Π΄ΠΈΡ‚Π΅ элСмСнты массива:\n"; //Π²Π²ΠΎΠ΄ массива for (i=0; i>a[i]; //Π²Ρ‹Π²ΠΎΠ΄ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ массива for (i=0; i

//ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² new ΠΈ delete

#include "stdafx.h"

#include

using namespace std ;

int main ()

setlocale (LC_ALL , "Rus" ) ;

int i , n ;

//Π²Π²ΠΎΠ΄ количСства элСмСнтов массива

cout << "n=" ; cin >> n ;

//Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти

int * a = new int [ n ] ;

cout << "Π’Π²Π΅Π΄ΠΈΡ‚Π΅ элСмСнты массива:\n" ;

//ввод массива

ЦСль Π»Π΅ΠΊΡ†ΠΈΠΈ : ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ объявлСния, выдСлСния ΠΈ освобоТдСния памяти для ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ… динамичСских массивов, обращСния ΠΊ элСмСнтам, Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ Π·Π°Π΄Π°Ρ‡ΠΈ с использованиСм ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ… динамичСских массивов Π² языкС C++.

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

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

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

ОбъявлСниС ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ… динамичСских массивов

Под объявлСниСм ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ динамичСского массива ΠΏΠΎΠ½ΠΈΠΌΠ°ΡŽΡ‚ объявлСниС указатСля Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π°Π½Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ динамичСский массив .

Бинтаксис :

Вип * ИмяМассива;

Π’ΠΈΠΏ – Ρ‚ΠΈΠΏ элСмСнтов объявляСмого динамичСского массива . Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ динамичСского массива Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ элСмСнты Ρ‚ΠΈΠΏΠ° void .

НапримСр:

int *a; double *d;

Π’ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… a ΠΈ d ΡΠ²Π»ΡΡŽΡ‚ΡΡ указатСлями Π½Π° Π½Π°Ρ‡Π°Π»ΠΎ выдСляСмого участка памяти. Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ адрСса выдСляСмой области памяти для Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Ρ‚ΠΈΠΏΠ° int ΠΈ Ρ‚ΠΈΠΏΠ° double соотвСтствСнно.

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

Π’Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти ΠΏΠΎΠ΄ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ динамичСский массив

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΏΠΎΠ΄ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ динамичСский массив Π² языкС Π‘++ сущСствуСт 2 способа.

1) ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ new , которая выдСляСт для размСщСния массива участок динамичСской памяти ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΈ Π½Π΅ позволяСт ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ элСмСнты массива.

Бинтаксис :

ИмяМассива = new Π’ΠΈΠΏ [Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Π’ΠΈΠΏΠ°ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚Ρ‹];

ИмяМассива – ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ массива, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ имя указатСля для выдСляСмого Π±Π»ΠΎΠΊΠ° памяти .

Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Π’ΠΈΠΏΠ°ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚Ρ‹ – Π·Π°Π΄Π°Π΅Ρ‚ количСство элСмСнтов ( Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ) массива . Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ константного Ρ‚ΠΈΠΏΠ° вычисляСтся Π½Π° этапС компиляции.

НапримСр:

int *mas; mas = new int ; /*Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ динамичСской памяти Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 100*sizeof(int) Π±Π°ΠΉΡ‚ΠΎΠ²*/ double *m = new double [n]; /*Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ динамичСской памяти Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ n*sizeof(double) Π±Π°ΠΉΡ‚ΠΎΠ²*/ long (*lm); lm = new long ; /*Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ динамичСской памяти Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 2*4*sizeof(long) Π±Π°ΠΉΡ‚ΠΎΠ²*/

ΠŸΡ€ΠΈ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠΈ динамичСской памяти Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ массива Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹.

2) ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ malloc (calloc) , которая слуТит для выдСлСния динамичСской памяти.

Бинтаксис :

ИмяМассива = (Вип *) malloc(N*sizeof(Вип));

ИмяМассива = (Вип *) calloc(N, sizeof(Вип));

ИмяМассива – ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ массива, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ имя указатСля для выдСляСмого Π±Π»ΠΎΠΊΠ° памяти .

Π’ΠΈΠΏ – Ρ‚ΠΈΠΏ указатСля Π½Π° массив .

N – количСство элСмСнтов массива.

НапримСр:

float *a; a=(float *)malloc(10*sizeof(float)); // ΠΈΠ»ΠΈ a=(float *)calloc(10,sizeof(float)); /*Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ динамичСской памяти Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 10*sizeof(float) Π±Π°ΠΉΡ‚ΠΎΠ²*/

Π’Π°ΠΊ ΠΊΠ°ΠΊ функция malloc (calloc) Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½Π΅Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ void * , Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ

// объявлСниС Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ динамичСского массива Π½Π° 10 элСмСнтов:

float **ptrarray = new float* ; // Π΄Π²Π΅ строки Π² массивС

for (int count = 0; count < 2; count++)

ptrarray = new float ; // ΠΈ ΠΏΡΡ‚ΡŒ столбцов

// Π³Π΄Π΅ ptrarray – массив ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ участок памяти ΠΏΠΎΠ΄ массив вСщСствСнных чисСл Ρ‚ΠΈΠΏΠ° float

Π‘Π½Π°Ρ‡Π°Π»Π° ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ порядка float **ptrarray, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ссылаСтся Π½Π° массив ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ float* ,Π³Π΄Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива Ρ€Π°Π²Π΅Π½ Π΄Π²ΡƒΠΌ. ПослС Ρ‡Π΅Π³ΠΎ Π² Ρ†ΠΈΠΊΠ»Π΅forΠΊΠ°ΠΆΠ΄ΠΎΠΉ строкС массива объявлСнного встрокС 2 выдСляСтся ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΏΠΎΠ΄ ΠΏΡΡ‚ΡŒ элСмСнтов. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ получаСтся Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ динамичСский массив ptrarray.Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ высвобоТдСния памяти ΠΎΡ‚Π²ΠΎΠ΄ΠΈΠΌΠΎΠΉ ΠΏΠΎΠ΄ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ динамичСский массив.

// высвобоТдСниС памяти ΠΎΡ‚Π²ΠΎΠ΄ΠΈΠΌΠΎΠΉ ΠΏΠΎΠ΄ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ динамичСский массив:

for (int count = 0; count < 2; count++)

delete ptrarray;

// Π³Π΄Π΅ 2 – количСство строк Π² массивС

#include
#include
#include
void main()
{

int *a; // ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° массив

system("chcp 1251");

scanf("%d", &n);

scanf("%d", &m);

// Π’Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти

a = (int*) malloc(n*m*sizeof(int));

// Π’Π²ΠΎΠ΄ элСмСнтов массива

for(i=0; i

for(j=0; j

printf("a[%d][%d] = ", i, j);

scanf("%d", (a+i*m+j));

// Π’Ρ‹Π²ΠΎΠ΄ элСмСнтов массива

for(i=0; i

for(j=0; j

printf("%5d ", *(a+i*m+j)); // 5 знакомСст ΠΏΠΎΠ΄ элСмСнт массива

getchar(); getchar();
}

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния

Π’Π²Π΅Π΄ΠΈΡ‚Π΅ количСство строк: 3

Π’Π²Π΅Π΄ΠΈΡ‚Π΅ количСство столбцов: 4

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

Ѐункция malloc() – Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π±Π°ΠΉΡ‚ области памяти Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ size, которая Π±Ρ‹Π»Π° Π²Ρ‹Π΄Π΅Π»Π΅Π½Π° ΠΈΠ· динамичСски распрСдСляСмой области памяти. Если Π² динамичСской области памяти Π½Π΅ Ρ…Π²Π°Ρ‚Π°Π΅Ρ‚ памяти, Ρ‚ΠΎ возвращаСтся Π½ΡƒΠ»Π΅Π²ΠΎΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ.

#include
#include
#include
void main()
{

int **a; // ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° строку

system("chcp 1251");

printf("Π’Π²Π΅Π΄ΠΈΡ‚Π΅ количСство строк: ");

scanf("%d", &n);

printf("Π’Π²Π΅Π΄ΠΈΡ‚Π΅ количСство столбцов: ");

scanf("%d", &m);

// Π’Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти ΠΏΠΎΠ΄ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° строки

a = (int**)malloc(n*sizeof(int*));

// Π’Π²ΠΎΠ΄ элСмСнтов массива

for(i=0; i

// Π’Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти ΠΏΠΎΠ΄ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ строк

a[i] = (int*)malloc(m*sizeof(int));

for(j=0; j

printf("a[%d][%d] = ", i, j);

scanf("%d", &a[i][j]);

// Π’Ρ‹Π²ΠΎΠ΄ элСмСнтов массива

for(i=0; i

for(j=0; j

printf("%5d ", a[i][j]); // 5 знакомСст ΠΏΠΎΠ΄ элСмСнт массива

free(a[i]); // освобоТдСниС памяти ΠΏΠΎΠ΄ строку

getchar(); getchar();
}

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π΅Π½ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌΡƒ ΡΠ»ΡƒΡ‡Π°ΡŽ.

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

Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ.

Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ – это пСрСмСнная, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ являСтся адрСс, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Π΄Π°Π½Π½Ρ‹Π΅. АдрСс – это Π½ΠΎΠΌΠ΅Ρ€ ячСйки памяти, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΈΠ»ΠΈ с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Π΄Π°Π½Π½Ρ‹Π΅.

По Ρ‚ΠΈΠΏΡƒ Π΄Π°Π½Π½Ρ‹Ρ… Π² БИ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ дСлятся Π½Π°:

Π’ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ – ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ, содСрТащий адрСс Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° (систСмного ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ).

НС Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ – ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ, содСрТащий адрСс Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° (просто адрСс).

ОбъявлСниС указатСля;

Установка указатСля;

ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ, располоТСнному ΠΏΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ. ОбъявлСниС (описаниС) указатСля Π² языкС БИ ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²ΠΈΠ΄:

Π’ΠΈΠΏ *имя [=Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅];

Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π² БИ ΠΏΡ€ΠΈ объявлСнии ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΡƒΠΊΠ°Π·Π°Π² Ρ‡Π΅Ρ€Π΅Π· Π·Π½Π°ΠΊ присвоСния ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π”Π°Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ адрСсом, записанном Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π²ΠΈΠ΄Π΅:

НулСвоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ NULL);

Π”Ρ€ΡƒΠ³ΠΎΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ;

АдрСс ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ (Ρ‡Π΅Ρ€Π΅Π· ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ взятия адрСса);

Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅Π΅ собой Π°Ρ€ΠΈΡ„ΠΌΠ΅Ρ‚ΠΈΠΊΡƒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ;

АдрСс, ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΉΡΡ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ выдСлСния динамичСской памяти.

#include

int var; // обычная цСлочислСнная пСрСмСнная

int *ptrVar; // цСлочислСнный ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ (ptrVar Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΈΠΏΠ° int, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‚ΠΈΠΏΠ° int)

ptrVar = &var; // присвоили ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ адрСс ячСйки Π² памяти, Π³Π΄Π΅ Π»Π΅ΠΆΠΈΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ var

scanf("%d", &var); // Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ var ΠΏΠΎΠ»ΠΎΠΆΠΈΠ»ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π²Π²Π΅Π΄Π΅Π½Π½ΠΎΠ΅ с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹

printf("%d\n", *ptrVar); // Π²Ρ‹Π²ΠΎΠ΄ значСния Ρ‡Π΅Ρ€Π΅Π· ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния: 6 6

ЛСкция β„–3.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Ѐункция – это синтаксичСски Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ дСйствиС ΠΈΠ»ΠΈ Π³Ρ€ΡƒΠΏΠΏΡƒ дСйствий. КаТдая функция ΠΈΠΌΠ΅Π΅Ρ‚ свой интСрфСйс ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ – Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ указываСтся Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, список Π΅Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈ Ρ‚ΠΈΠΏ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния.

ОписаниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° языкС БИ осущСствляСтся Π² любом мСстС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π²Π½Π΅ описания Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ состоит ΠΈΠ· Ρ‚Ρ€Π΅Ρ… элСмСнтов:

1. ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ;

2. Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ;

3. Ρ‚Π΅Π»ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

ΠŸΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ – Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ описания Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, прСдназначСнная для объявлСния Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, интСрфСйс ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ соотвСтствуСт Π΄Π°Π½Π½ΠΎΠΌΡƒ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΡƒ.ОбъявлСниС ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ° ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²ΠΈΠ΄:

Π’ΠΈΠΏ имя(список Ρ‚ΠΈΠΏΠΎΠ² Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²);

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ – значСния, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΏΡ€ΠΈ Π΅Π΅ Π²Ρ‹Π·ΠΎΠ²Π΅.

Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ – описаниС интСрфСйсной части Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, которая содСрТит: Ρ‚ΠΈΠΏ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния, имя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ список Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Бинтаксис объявлСния Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

Π’ΠΈΠΏ имя(список Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²)

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ:

Int func(int i, double x, double y)

Void func(int ind, char *string)

Double func(void)

Π’Π΅Π»ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ – Ρ‡Π°ΡΡ‚ΡŒ-рСализация, содСрТащая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄, выполняСмый ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’Π΅Π»ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ всСгда слСдуСт сразу послС Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (Ρ€Π°Π·Π΄Π΅Π»ΡΡ‚ΡŒ ΠΈΡ… нСльзя) ΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки.

РСализация Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° БИ для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° числа.

Double factorial(unsigned);

Double factorial(unsigned num)

Double fact = 1.0;

For(unsigned i=1;i<=num;i++)

Fact *= (double)i;

Return fact;

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹.

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

ОбъявлСниС Π² БИ структуры ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΈΠ΄:

Struct [имя Ρ‚ΠΈΠΏΠ°]

ПолС_1;

ПолС_2;

ПолС_N;

  } [список ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…];

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

Π€Π°ΠΉΠ»Ρ‹.

Π€Π°ΠΉΠ» – это имСнованная ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° ΠΊΠ°ΠΊΠΎΠΌ-Π»ΠΈΠ±ΠΎ носитСлС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. Π’ΠΈΠΏΡ‹ Ρ„Π°ΠΉΠ»ΠΎΠ² (ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ языка «БИ»):
  тСкстовыС;
  бинарныС.
ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π½Π°Π΄ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ:
1.ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ².
2.Π§Ρ‚Π΅Π½ΠΈΠ΅ ΠΈ запись Π΄Π°Π½Π½Ρ‹Ρ….
3.Π—Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ².

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ:
1.Навигация ΠΏΠΎ Ρ„Π°ΠΉΠ»Ρƒ.
2.ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ошибок Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ.
3.Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ².
4.ОписаниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ

Π Π΅ΠΆΠΈΠΌΡ‹ открытия Ρ„Π°ΠΉΠ»ΠΎΠ² с БИ

ΠŸΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²
 FILE * freopen(const char *filename, const char *mode, FILE *stream);

Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚:
β€ƒΠ£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ„Π°ΠΉΠ» – всС Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ,
 NULL – ошибка пСрСопрСдСлСния.

Π—Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π°
 int fclose(FILE *stream);

Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚:
 0 – Ρ„Π°ΠΉΠ» ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π·Π°ΠΊΡ€Ρ‹Ρ‚.
 1 – ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° ошибка закрытия Ρ„Π°ΠΉΠ»Π°.

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° достиТСниС ΠΊΠΎΠ½Ρ†Π° Ρ„Π°ΠΉΠ»Π°
 int feof(FILE *stream);
 stream - ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ Ρ„Π°ΠΉΠ».

Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚:
 0 – Ссли ΠΊΠΎΠ½Π΅Ρ† Ρ„Π°ΠΉΠ»Π° Π΅Ρ‰Π΅ Π½Π΅ достигнут.
 !0 – достигнут ΠΊΠΎΠ½Π΅Ρ† Ρ„Π°ΠΉΠ»Π°.

ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ тСкстовых Ρ„Π°ΠΉΠ»ΠΎΠ²
Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ указываСтся символ t (Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ):
 rt, wt, at, rt+, wt+, at+

Π§Ρ‚Π΅Π½ΠΈΠ΅ ΠΈΠ· тСкстового Ρ„Π°ΠΉΠ»Π°

Π€ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅
 int fscanf(FILE *stream, const char * format, ...);

Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚:
 >0 – число ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…,
 0 – Π½ΠΈ ΠΎΠ΄Π½Π° ΠΈΠ· ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π½Π΅ Π±Ρ‹Π»Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Π°,
 EOF – ошибка ΠΈΠ»ΠΈ достигнут ΠΊΠΎΠ½Π΅Ρ† Ρ„Π°ΠΉΠ»Π°.
Π§Ρ‚Π΅Π½ΠΈΠ΅ строки

Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚:
 buffer – всС Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ,
Π§Ρ‚Π΅Π½ΠΈΠ΅ строки
 char * fgets(char * buffer, int maxlen, FILE *stream);

Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚:
 buffer – всС Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ,
 NULL – ошибка ΠΈΠ»ΠΈ достигнут ΠΊΠΎΠ½Π΅Ρ† Ρ„Π°ΠΉΠ»Π°.
Π§Ρ‚Π΅Π½ΠΈΠ΅ символа
 int fgetc(FILE *stream);
Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚:
 код символа – Ссли всС Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ,
 EOF – Ссли ошибка ΠΈΠ»ΠΈ достигнут ΠΊΠΎΠ½Π΅Ρ† Ρ„Π°ΠΉΠ»Π°.
ΠŸΠΎΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ символа ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² ΠΏΠΎΡ‚ΠΎΠΊ
 int ungetc(int c, FILE *stream);
Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚:
 код символа – Ссли всС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ,
 EOF – ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° ошибка.

Π—Π°ΠΏΠΈΡΡŒ Π² тСкстовый Ρ„Π°ΠΉΠ» Π² БИ

Π€ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄
 int fprintf(FILE *stream, const char *format, ...);
Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚:
 число записанных символов – Ссли всС Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ,
β€ƒΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ – Ссли ошибка.
Π—Π°ΠΏΠΈΡΡŒ строки
 int fputs(const char *string, FILE *stream);
Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚:
 число записанных символов – всС Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ,
 EOF – ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° ошибка.
Π—Π°ΠΏΠΈΡΡŒ символа
 int fputc(int c, FILE *stream);
Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚:
 код записанного символа – всС Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ,
 EOF – ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° ошибка.
ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²
 Во Π²Ρ‚ΠΎΡ€ΠΎΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ указываСтся символ b (ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ):rb, wb, ab, rb+, wb+, ab+
Π§Ρ‚Π΅Π½ΠΈΠ΅ ΠΈΠ· Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²
 size_t fread(void *buffer, size_t size, size_t num,FILE *stream);
Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ количСство ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Π½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ². Если ΠΎΠ½ΠΎ мСньшС num, Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° ошибка ΠΈΠ»ΠΈ достигнут
ΠΊΠΎΠ½Π΅Ρ† Ρ„Π°ΠΉΠ»Π°.

Π—Π°ΠΏΠΈΡΡŒ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»
 size_t fwrite(const void *buffer, size_t size, size_t num, FILE *stream);
Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ количСство записанных Π±Π»ΠΎΠΊΠΎΠ². Если ΠΎΠ½ΠΎ мСньшС num, Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° ошибка.

Навигация ΠΏΠΎ Ρ„Π°ΠΉΠ»Ρƒ

Π§Ρ‚Π΅Π½ΠΈΠ΅ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ смСщСния Π² Ρ„Π°ΠΉΠ»Π΅:
 long int ftell(FILE *stream);
ИзмСнСниС Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ смСщСния Π² Ρ„Π°ΠΉΠ»Π΅:
 int fseek(FILE *stream, long int offset, int origin);

SEEK_SET (0) – ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π° Ρ„Π°ΠΉΠ»Π°.
 SEEK_CUR (1) – ΠΎΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ.
 SEEK_END (2) – ΠΎΡ‚ ΠΊΠΎΠ½Ρ†Π° Ρ„Π°ΠΉΠ»Π°.
Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚:
 0 – всС Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ,
 !0 – ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° ошибка.
ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ Π½Π°Ρ‡Π°Π»Ρƒ Ρ„Π°ΠΉΠ»Π°:
 void rewind(FILE *stream);
Π§Ρ‚Π΅Π½ΠΈΠ΅ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Π² Ρ„Π°ΠΉΠ»Π΅:
 int fgetpos(FILE *stream, fpos_t *pos);
Установка Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Π² Ρ„Π°ΠΉΠ»Π΅:
 int fsetpos(FILE *stream, const fpos_t *pos);
Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚:
 0 – всС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ,
 !0 – ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° ошибка.
Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° fpos_t:
 typedef struct fpos_t {
  long off;
  mbstate_t wstate;
 } fpos_t;

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠ° ошибки:
 int ferror(FILE *stream);
Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½Π΅Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ссли Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ошибка.
Ѐункция сброса ошибки:
 void clearerr(FILE *stream);
Ѐункция Π²Ρ‹Π²ΠΎΠ΄Π° сообщСния ΠΎΠ± ошибкС:
 void perror(const char *string);

БуфСризация

Ѐункция очистки Π±ΡƒΡ„Π΅Ρ€Π°:
 int fflush(FILE *stream);
Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚:
 0 – всС Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ.
 EOF – ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° ошибка.
Ѐункция управлСния Π±ΡƒΡ„Π΅Ρ€ΠΎΠΌ:
 void setbuf(FILE *stream, char * buffer);

Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚ Π±ΡƒΡ„Π΅Ρ€ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ BUFSIZ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π΄ΠΎ Π²Π²ΠΎΠ΄Π° ΠΈΠ»ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° Π² ΠΏΠΎΡ‚ΠΎΠΊ.

Π’Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹

Ѐункция создания Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°:
 FILE * tmpfile(void);
Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ wb+. ПослС закрытия Ρ„Π°ΠΉΠ»Π°, послСдний автоматичСски удаляСтся.
Ѐункция Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈΠΌΠ΅Π½ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°:
 char * tmpnam(char *buffer);

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅

Ѐункция удалСния Ρ„Π°ΠΉΠ»Π°:
 int remove(const char *filename);
Ѐункция пСрСимСнования Ρ„Π°ΠΉΠ»Π°:
 int rename(const char *fname, const char *nname);
Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚:
 0 – Π² случаС успСха,
 !0 – Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС.

ЛСкция β„–4.

Π‘Ρ‚Π΅ΠΊ.

Π‘Ρ‚Π΅ΠΊ (stack) являСтся ΠΊΠ°ΠΊ Π±Ρ‹ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ "послСдним ΠΏΡ€ΠΈΡˆΠ΅Π» - ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π²Ρ‹ΡˆΠ΅Π»" (last-in, first-out, LIFO). Π§Ρ‚ΠΎΠ±Ρ‹ наглядно ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ сСбС стСк, вспомнитС стопку Ρ‚Π°Ρ€Π΅Π»ΠΎΠΊ. ΠŸΠ΅Ρ€Π²Π°Ρ Ρ‚Π°Ρ€Π΅Π»ΠΊΠ°, стоящая Π½Π° столС, Π±ΡƒΠ΄Π΅Ρ‚ использована послСднСй, Π° послСдняя Ρ‚Π°Ρ€Π΅Π»ΠΊΠ°, полоТСнная Π½Π°Π²Π΅Ρ€Ρ… - ΠΏΠ΅Ρ€Π²ΠΎΠΉ. Π‘Ρ‚Π΅ΠΊΠΈ часто ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π² систСмном ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΌ обСспСчСнии, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ компиляторы ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρ‹.

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ со стСками ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ занСсСния ΠΈ извлСчСния элСмСнта ΡΠ²Π»ΡΡŽΡ‚ΡΡ основными. Π”Π°Π½Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ "Π·Π°Ρ‚ΠΎΠ»ΠΊΠ°Ρ‚ΡŒ Π² стСк" (push) ΠΈ "Π²Ρ‹Ρ‚ΠΎΠ»ΠΊΠ½ΡƒΡ‚ΡŒ ΠΈΠ· стСка" (pop). ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ стСка Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: push(), которая "Π·Π°Ρ‚Π°Π»ΠΊΠΈΠ²Π°Π΅Ρ‚" Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² стСк, ΠΈ pop(), которая "Π²Ρ‹Ρ‚Π°Π»ΠΊΠΈΠ²Π°Π΅Ρ‚" Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· стСка. Π’Π°ΠΊΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти, которая Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² качСствС стСка. Для этой Ρ†Π΅Π»ΠΈ ΠΌΠΎΠΆΠ½ΠΎ отвСсти массив ΠΈΠ»ΠΈ динамичСски Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ памяти с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ языка Π‘, прСдусмотрСнных для динамичСского распрСдСлСния памяти. Как ΠΈ Π² случаС ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ, функция извлСчСния ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΈΠ· списка элСмСнт ΠΈ удаляСт Π΅Π³ΠΎ, Ссли ΠΎΠ½ Π½Π΅ хранится Π³Π΄Π΅-Π»ΠΈΠ±ΠΎ СшС. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° общая Ρ„ΠΎΡ€ΠΌΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ push() ΠΈ pop(), Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… с цСлочислСнным массивом. Π‘Ρ‚Π΅ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ, ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ² Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… массива.

int tos=0; /* Π²Π΅Ρ€ΡˆΠΈΠ½Π° стСка */

/* Π—Π°Ρ‚ΠΎΠ»ΠΊΠ°Ρ‚ΡŒ элСмСнт Π² стСк. */

void push(int i)

if(tos >= MAX) {

printf("Π‘Ρ‚Π°ΠΊ ΠΏΠΎΠ»ΠΎΠ½\n");

/* ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ элСмСнт стСка. */

if(tos < 0) {

printf("Π‘Ρ‚Π΅ΠΊ пуст\n");

return stack;

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ tos ("top of stack" - "Π²Π΅Ρ€ΡˆΠΈΠ½Π° стСка") содСрТит индСкс Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ стСка. ΠŸΡ€ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ случаи, ΠΊΠΎΠ³Π΄Π° стСк Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ ΠΈΠ»ΠΈ пуст. Π’ нашСм случаС ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠΌ пустого стСка являСтся равСнство tos Π½ΡƒΠ»ΡŽ, Π° ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠΌ пСрСполнСния стСка - Ρ‚Π°ΠΊΠΎΠ΅ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ tos, Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΊΡƒΠ΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ послСднСй ячСйки массива.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Ρ‹ со стСком.

Π‘Ρ‚Π΅ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅ΡˆΠ°Ρ‚ΡŒΡΡ Π² динамичСски распрСдСляСмой памяти, Π° Π½Π΅ Π² массивС фиксированного Ρ€Π°Π·ΠΌΠ΅Ρ€Π°. Π₯отя ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ динамичСского распрСдСлСния памяти ΠΈ Π½Π΅ трСбуСтся Π² Ρ‚Π°ΠΊΠΎΠΌ простом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ для хранСния Π΄Π°Π½Π½Ρ‹Ρ… стСка.

/* ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€ с чСтырмя дСйствиями. */

#include

#include

int *p; /* ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΎΠ±Π»Π°ΡΡ‚ΡŒ свободной памяти */

int *tos; /* ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ стСка */

int *bos; /* ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π΄Π½ΠΎ стСка */

void push(int i);

p = (int *) malloc(MAX*sizeof(int)); /* ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ для стСка */

printf("Ошибка ΠΏΡ€ΠΈ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠΈ памяти\n");

bos = p + MAX-1;

printf("ΠšΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€ с Ρ‡Π΅Ρ‚Ρ‹Ρ€ΡŒΠΌΡ дСйствиями\n");

printf("НаТмитС "q" для Π²Ρ‹Ρ…ΠΎΠ΄Π°\n");

printf("%d\n", a+b);

printf("%d\n", b-a);

printf("%d\n", b*a);

printf("Π”Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° 0.\n");

printf("%d\n", b/a);

case ".": /* ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ содСрТимоС Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ стСка */

printf("Π’Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π° Π²Π΅Ρ€ΡˆΠΈΠ½Π΅ стСка: %d\n", a);

} while(*s != "q");

/* ЗанСсСниС элСмСнта Π² стСк. */

void push(int i)

if(p > bos) {

printf("Π‘Ρ‚Π΅ΠΊ ΠΏΠΎΠ»ΠΎΠ½\n");

/* ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ элСмСнта ΠΈΠ· стСка. */

if(p < tos) {

printf("Π‘Ρ‚Π΅ΠΊ пуст\n");

ΠžΡ‡Π΅Ρ€Π΅Π΄ΡŒ.

ΠžΡ‡Π΅Ρ€Π΅Π΄ΡŒ - это Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ список ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Ρ€Π°Π±ΠΎΡ‚Π° с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ происходит ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ "ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΏΡ€ΠΈΡˆΠ΅Π» - ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π²Ρ‹ΡˆΠ΅Π»" (first-in, first-out); этот ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ (ΠΈ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΊΠ°ΠΊ структура Π΄Π°Π½Π½Ρ‹Ρ…) ΠΈΠ½ΠΎΠ³Π΄Π° Π΅Ρ‰Π΅ называСтся FIFO. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½Π½Ρ‹ΠΉ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ элСмСнт Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ ΠΈΠ· Π½Π΅Π΅ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ, Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½Π½Ρ‹ΠΉ элСмСнт Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ ΠΈ Ρ‚.Π΄. Π­Ρ‚ΠΎ СдинствСнный способ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒΡŽ; ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ доступ ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ элСмСнтам Π½Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ сСбС Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π²Π²Π΅Π΄Π΅ΠΌ Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: qstore() ΠΈ qretrieve() (ΠΎΡ‚ "store"- "ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ", "retrieve" - "ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ"). Ѐункция qstore() ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ элСмСнт Π² ΠΊΠΎΠ½Π΅Ρ† ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ, Π° функция qretrieve() удаляСт элСмСнт ΠΈΠ· Π½Π°Ρ‡Π°Π»Π° ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π’ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ дСйствиС ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Ρ‚Π°ΠΊΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ.

ДСйствиС Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ
qstore(A) A
qstore(B) А Π’
qstore(C) A B C
qretrieve() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ А Π’ Π‘
qstore(D) B C D
qretrieve() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π’ C D
qretrieve() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π‘ D

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ опСрация извлСчСния удаляСт элСмСнт ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΈ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°Π΅Ρ‚ Π΅Π³ΠΎ, Ссли ΠΎΠ½ Π½Π΅ хранится Π³Π΄Π΅-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ мСстС. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ послС извлСчСния всСх элСмСнтов ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ пуста.

Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π·Π°Π΄Π°Ρ‡. Один ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ популярных Π²ΠΈΠ΄ΠΎΠ² Ρ‚Π°ΠΊΠΈΡ… Π·Π°Π΄Π°Ρ‡ - симуляция. ΠžΡ‡Π΅Ρ€Π΅Π΄ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π² ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ°Ρ… Π·Π°Π΄Π°Ρ‡ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм ΠΈ ΠΏΡ€ΠΈ Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°.

/* Мини-ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ событий */

#include

#include

#include

#include

char *p, *qretrieve(void);

void enter(void), qstore(char *q), review(void), delete_ap(void);

for(t=0; t < MAX; ++t) p[t] = NULL; /* ΠΈΠ½ΠΈΡ†ΠΈΠ»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ массив

пустыми указатСлями */

printf("ВвСсти (E), Бписок (L), Π£Π΄Π°Π»ΠΈΡ‚ΡŒ (R), Π’Ρ‹Ρ…ΠΎΠ΄ (Q): ");

*s = toupper(*s);

/* Вставка Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π½ΠΎΠ²ΠΎΠΉ встрСчи. */

void enter(void)

printf("Π’Π²Π΅Π΄ΠΈΡ‚Π΅ встрСчу %d: ", spos+1);

if(*s==0) break; /* запись Π½Π΅ Π±Ρ‹Π»Π° ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½Π° */

p = (char *) malloc(strlen(s)+1);

printf("НС Ρ…Π²Π°Ρ‚Π°Π΅Ρ‚ памяти.\n");

if(*s) qstore(p);

/* ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ содСрТимого ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ. */

void review(void)

for(t=rpos; t < spos; ++t)

printf("%d. %s\n", t+1, p[t]);

/* Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ встрСчи ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ. */

void delete_ap(void)

if((p=qretrieve())==NULL) return;

printf("%s\n", p);

/* Вставка встрСчи. */

void qstore(char *q)

printf("List Full\n");

/* Π˜Π·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ встрСчи. */

char *qretrieve(void)

if(rpos==spos) {

printf("Π’ΡΡ‚Ρ€Π΅Ρ‡ΡŒ большС Π½Π΅Ρ‚.\n");

return p;

Бписок.

односвязный цикличСский список это рСкурсивноС объявлСниС структур, Ρ‚ΠΎΡ‡Π½Π΅Π΅ указатСля Π½Π° Π½Π΅Π΅ Π² самой структурС Ρ‚ΠΈΠΏΠ°:

int data;//ΠΏΠΎΠ»Π΅ Π΄Π°Π½Π½Ρ‹Ρ…

s *next;//ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ элСмСнт

} *first,*curr;//ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ элСмСнт

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ:

first->next=curr;

Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ first->data

Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ элСмСнт: curr->next=new s;

curr=curr->next;//ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡˆΡŒ ΠΊ послСднСму

ΠΈ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ 50 элСмСнт Ρ‡Π΅Ρ€Π΅Π· Ρ†ΠΈΠΊΠ» ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°ΠΉ список:

curr=first;//ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΊ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ

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

if(curr->next!=NULL)

curr=curr->next;


ΠŸΠΎΡ…ΠΎΠΆΠ°Ρ информация.


ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ Π½Π° этом Π²Π΅Π±-сайтС, поэтому здСсь ΠΈΠ΄Π΅Ρ‚.

Π― Π½ΠΎΠ²ΠΈΡ‡ΠΎΠΊ Π½Π° Π‘++, ΠΈ сСйчас я Ρ€Π°Π±ΠΎΡ‚Π°ΡŽ Π½Π°Π΄ ΠΊΠ½ΠΈΠ³ΠΎΠΉ "Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ Π‘++ 2nd ed, D.S. Malik".

Π’ ΠΊΠ½ΠΈΠ³Π΅ Малик ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Π΄Π²Π° способа создания динамичСского Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива. Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ Π²Ρ‹ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΊΠ°ΠΊ массив ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ, Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ integer. Π½Π°ΠΏΡ€.

Int *board;

И Π·Π°Ρ‚Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ for-loop для создания "столбцов" ΠΏΡ€ΠΈ использовании массива ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΊΠ°ΠΊ "строк".

Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄, Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ.

Int **board; board = new int* ;

Мой вопрос Ρ‚Π°ΠΊΠΎΠ²: ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π»ΡƒΡ‡ΡˆΠ΅? ΠœΠ΅Ρ‚ΠΎΠ΄ ** ΠΌΠ½Π΅ Π»Π΅Π³Ρ‡Π΅ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Π½ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡ‡Ρ‚ΠΈ Ρ‚Π°ΠΊ ΠΆΠ΅. Оба способа ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для создания динамичСских 2-ΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов.

Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ: Π½Π΅ Π±Ρ‹Π»ΠΎ достаточно ясно, ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π²Ρ‹ΡˆΠ΅. Π’ΠΎΡ‚ ΠΊΠ°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ я ΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π»:

Int row, col; cout << "Enter row size:"; cin >> row; cout << "\ncol:"; cin >> col; int *p_board; for (int i=0; i < row; i++) p_board[i] = new int; for (int i=0; i < row; i++) { for (int j=0; j < col; j++) { p_board[i][j] = j; cout << p_board[i][j] << " "; } cout << endl; } cout << endl << endl; int **p_p_board; p_p_board = new int* ; for (int i=0; i < row; i++) p_p_board[i] = new int; for (int i=0; i < row; i++) { for (int j=0; j < col; j++) { p_p_board[i][j] = j; cout << p_p_board[i][j] << " "; } cout << endl; }

4 ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ²

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для создания динамичСских 2D-массивов, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ:

Int *board;

Π²Ρ‹ ΠΏΠΎ сущСству Π²Ρ‹Π΄Π΅Π»ΠΈΠ»ΠΈ массив ΠΈΠ· 4 ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° int Π½Π° стСк . ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Ссли Π²Ρ‹ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ заполняСтС ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· этих 4 ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ динамичСским массивом:

For (int i = 0; i < 4; ++i) { board[i] = new int; }

Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Π΅Ρ‚Π΅, прСдставляСт собой 2D-массив с статичСским числом строк (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС 4) ΠΈ динамичСским числом столбцов (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС 10). Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΠ° Π½Π΅ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ , Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ распрСдСлСнии массива Π² стСкС Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ постоянный Ρ€Π°Π·ΠΌΠ΅Ρ€ , Ρ‚.Π΅. Π˜Π·Π²Π΅ΡΡ‚Π½Ρ‹ΠΉ Π² врСмя . ДинамичСский массив называСтся динамичСским , ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ извСстСн Π² врСмя компиляции , Π½ΠΎ скорСС ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² Π²ΠΎ врСмя выполнСния .

Π•Ρ‰Π΅ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅:

Int *board;

Const int x = 4; // <--- `const` qualifier is absolutely needed in this case! int *board[x];

Π²Ρ‹ прСдоставляСтС константу, ΠΈΠ·Π²Π΅ΡΡ‚Π½ΡƒΡŽ Π² врСмя компиляции (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС 4 ΠΈΠ»ΠΈ x), Ρ‡Ρ‚ΠΎΠ±Ρ‹ компилятор Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠ³ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ эту ΠΏΠ°ΠΌΡΡ‚ΡŒ для вашСго массива, ΠΈ ΠΊΠΎΠ³Π΄Π° ваша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π° Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ, Ρƒ Π½Π΅Π΅ ΡƒΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ этот объСм памяти для массива board , поэтому ΠΎΠ½ называСтся static , Ρ‚.Π΅. ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ ТСстко Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ динамичСски ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ (Π²ΠΎ врСмя выполнСния).

Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π΄Π΅Π»Π°Π΅Ρ‚Π΅:

Int **board; board = new int*;

Int x = 10; // <--- Notice that it does not have to be `const` anymore! int **board; board = new int*[x];

компилятор Π½Π΅ Π·Π½Π°Π΅Ρ‚, сколько потрСбуСтся массиву памяти board , ΠΈ поэтому ΠΎΠ½ Π½Π΅ Π·Π°Ρ€Π°Π½Π΅Π΅ выдСляСт всС. Но ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ запускаСтС свою ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Ρ€Π°Π·ΠΌΠ΅Ρ€ массива Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒΡΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ x (Π²ΠΎ врСмя выполнСния), Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ пространство для массива board Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΎ Π½Π° Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡƒΡŽ ΠΊΡƒΡ‡Ρƒ - ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ всС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Π΅ Π½Π° вашСм ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅, ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹Π΄Π΅Π»ΡΡ‚ΡŒ нСизвСстно Π·Π°Ρ€Π°Π½Π΅Π΅ (Π²ΠΎ врСмя компиляции) суммируСт ΠΏΠ°ΠΌΡΡ‚ΡŒ для Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ использования.

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ динамичСский 2D-массив, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠΉΡ‚ΠΈ со Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ:

Int **board; board = new int*; // dynamic array (size 10) of pointers to int for (int i = 0; i < 10; ++i) { board[i] = new int; // each i-th pointer is now pointing to dynamic array (size 10) of actual int values }

ΠœΡ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ создали ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹ΠΉ 2D-массив Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 10 Π½Π° 10. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ Π΅Π³ΠΎ ΠΈ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ фактичСскими значСниями, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ 1, ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Ρ†ΠΈΠΊΠ»Ρ‹:

For (int i = 0; i < 10; ++i) { // for each row for (int j = 0; j < 10; ++j) { // for each column board[i][j] = 1; } }

Π’ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ описываСтС для Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, Π΄Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 1D-массив:

Int *board = new int;

Π­Ρ‚ΠΎ просто выдСляСт массив с 10 элСмСнтами. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ‹ ΠΈΠΌΠ΅Π»ΠΈ Π² Π²ΠΈΠ΄Ρƒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ этого:

Int **board = new int*; for (int i = 0; i < 4; i++) { board[i] = new int; }

Π’ этом случаС ΠΌΡ‹ выдСляСм 4 int* , Π° Π·Π°Ρ‚Π΅ΠΌ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ… ΡƒΠΊΠ°ΠΆΠ΅ΠΌ Π½Π° динамичСски Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ массив ΠΈΠ· 10 int s.

Π˜Ρ‚Π°ΠΊ, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ сравниваСм это с int* board; . ОсновноС Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ использовании Ρ‚Π°ΠΊΠΎΠ³ΠΎ массива количСство "строк" ​​долТно Π±Ρ‹Ρ‚ΡŒ извСстно Π²ΠΎ врСмя компиляции. Π­Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ массивы Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ фиксированныС Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ компиляции. Π£ вас ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ этот массив ΠΈΠ· int* s, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ массив Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ Π² ΠΊΠΎΠ½Ρ†Π΅ Π΅Π³ΠΎ области.

ΠœΠ΅Ρ‚ΠΎΠ΄, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ динамичСски Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ строки, Ρ‚Π°ΠΊ ΠΈ столбцы, Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ слоТных ΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ памяти. Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ Ρ‚Π°ΠΊ:

For (int i = 0; i < 4; i++) { delete board[i]; } delete board;

Π― Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Ρ‚ΡŒ вмСсто этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ стандартный ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ std::array 4> ΠΈΠ»ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, std::vector> , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ.

Π’ ΠΎΠ±ΠΎΠΈΡ… случаях вашС Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ динамичСски Π·Π°Π΄Π°Π½ΠΎ (Ρ‚.Π΅. взято ΠΈΠ· ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ), Π½ΠΎ Ρ€Π°Π·Π½ΠΈΡ†Π° Π²ΠΎ внСшнСм ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΈ.

Π­Ρ‚ΠΎΡ‚ вопрос Π² основном эквивалСнтСн ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ:

ЯвляСтся int* x = new int; "Π»ΡƒΡ‡ΡˆΠ΅", Ρ‡Π΅ΠΌ int x ?

ΠžΡ‚Π²Π΅Ρ‚: "Π½Π΅Ρ‚, Ссли Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ этот Ρ€Π°Π·ΠΌΠ΅Ρ€ массива динамичСски".

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с ΠΎΡ‡Π΅Π½ΡŒ нСбольшим количСством Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΊ внСшним Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌ ΠΈ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π±Π°Π·ΠΎΠ²ΠΎΠ΅ использованиС int **array .

Π­Ρ‚ΠΎΡ‚ ΠΎΡ‚Π²Π΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ массив each ΠΈΠΌΠ΅Π΅Ρ‚ динамичСский Ρ€Π°Π·ΠΌΠ΅Ρ€, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ массив динамичСски Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π² массив Π²Π΅Ρ‚Π²Π΅ΠΉ динамичСского Ρ€Π°Π·ΠΌΠ΅Ρ€Π°.

Π­Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΈΠ· STDIN Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅:

2 2 3 1 5 4 5 1 2 8 9 3 0 1 1 3

Код для ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½ΠΈΠΆΠ΅...

#include int main() { int **array_of_arrays; int num_arrays, num_queries; num_arrays = num_queries = 0; std::cin >> num_arrays >> num_queries; //std::cout << num_arrays << " " << num_queries; //Process the Arrays array_of_arrays = new int*; int size_current_array = 0; for (int i = 0; i < num_arrays; i++) { std::cin >> size_current_array; int *tmp_array = new int; for (int j = 0; j < size_current_array; j++) { int tmp = 0; std::cin >> tmp; tmp_array[j] = tmp; } array_of_arrays[i] = tmp_array; } //Process the Queries int x, y; x = y = 0; for (int q = 0; q < num_queries; q++) { std::cin >> x >> y; //std::cout << "Current x & y: " << x << ", " << y << "\n"; std::cout << array_of_arrays[x][y] << "\n"; } return 0; }

Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ простая рСализация int main ΠΈ зависит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ std::cin ΠΈ std::cout . Barebones, Π½ΠΎ достаточно Ρ…ΠΎΡ€ΠΎΡˆΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с простыми ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΌΠΈ массивами.

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

Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π² Π‘++ – пСрСмСнная, которая Π² сСбС Ρ…Ρ€Π°Π½ΠΈΡ‚ адрСс Π΄Π°Π½Π½Ρ‹Ρ… (значСния) Π² памяти, Π° Π½Π΅ сами Π΄Π°Π½Π½Ρ‹Π΅.

РассмотрСв ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹, Π²Ρ‹ ΠΏΠΎΠΉΠΌΠ΅Ρ‚Π΅ Π³Π»Π°Π²Π½ΠΎΠ΅ – Π·Π°Ρ‡Π΅ΠΌ Π½Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ, ΠΊΠ°ΠΊ ΠΈΡ… ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ.

Допустим, Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ цСлочислСнный массив, Ρ‚ΠΎΡ‡Π½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π°ΠΌ Π½Π΅ извСстСн Π΄ΠΎ Π½Π°Ρ‡Π°Π»Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΌΡ‹ Π½Π΅ Π·Π½Π°Π΅ΠΌ ΠΊΠ°ΠΊΠΎΠ΅ количСство чисСл понадобится ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ внСсти Π² этот массив. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ΄ΡΡ‚Ρ€Π°Ρ…ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ массив Π½Π° нСсколько тысяч элСмСнтов (ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ Π½Π° 5 000). Π­Ρ‚ΠΎΠ³ΠΎ (ΠΏΠΎ Π½Π°ΡˆΠ΅ΠΌΡƒ ΡΡƒΠ±ΡŠΠ΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌΡƒ мнСнию) Π΄ΠΎΠ»ΠΆΠ½ΠΎ Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ для Ρ€Π°Π±ΠΎΡ‚Ρ‹. Π”Π° – Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ – этого ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ достаточно. Но Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ Π·Π°Π±Ρ‹Π²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ этот массив Π·Π°ΠΉΠΌΠ΅Ρ‚ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти ΠΌΠ½ΠΎΠ³ΠΎ мСста (5 000 * 4 (Ρ‚ΠΈΠΏ int) = 20 000 Π±Π°ΠΉΡ‚). ΠœΡ‹ Ρ‚ΠΎ ΠΏΠΎΠ΄ΡΡ‚Ρ€Π°Ρ…ΠΎΠ²Π°Π»ΠΈΡΡŒ, Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 10 элСмСнтов нашСго массива. ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ 40 Π±Π°ΠΉΡ‚ Π² Ρ€Π°Π±ΠΎΡ‚Π΅, Π° 19 960 Π±Π°ΠΉΡ‚ напрасно Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ ΠΏΠ°ΠΌΡΡ‚ΡŒ.

Π½Π΅Ρ€Π°Π·ΡƒΠΌΠ½ΠΎΠ΅ использованиС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти

#include using namespace std; int main() { setlocale(LC_ALL, "rus"); const int SizeOfArray = 5000; int arrWithDigits = {}; cout << "Массив занял Π² памяти " << sizeof(arrWithDigits) << " Π±Π°ΠΉΡ‚" << endl; int amount = 0; cout << "Бколько чисСл Π²Ρ‹ Π²Π²Π΅Π΄Ρ‘Ρ‚Π΅ Π² массив? "; cin >> amount; cout << "РСально Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ " << amount * sizeof(int) << " Π±Π°ΠΉΡ‚" << endl; for (int i = 0; i < amount; i++) { cout << i + 1 << "-Π΅ число: "; cin >> arrWithDigits[i]; } cout << endl; for (int i = 0; i < amount; i++) { cout << arrWithDigits[i] << " "; } cout << endl; return 0; }

#include

using namespace std ;

int main ()

const int SizeOfArray = 5000 ;

int arrWithDigits [ SizeOfArray ] = { } ;

cout << "Массив занял Π² памяти " << sizeof (arrWithDigits ) << " Π±Π°ΠΉΡ‚" << endl ;

int amount = 0 ;

cout << "Бколько чисСл Π²Ρ‹ Π²Π²Π΅Π΄Ρ‘Ρ‚Π΅ Π² массив? " ;

cin >> amount ;

cout << "РСально Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ " << amount * sizeof (int ) << " Π±Π°ΠΉΡ‚" << endl ;

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

cout << i + 1 << "-Π΅ число: " ;

cin >> arrWithDigits [ i ] ;

cout << endl ;

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

cout << arrWithDigits [ i ] << " " ;

cout << endl ;

return 0 ;

Π’ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ sizeof() ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹ΠΉ массив arrWithDigits строка 10. Она Π²Π΅Ρ€Π½Ρ‘Ρ‚ Π½Π° мСсто Π²Ρ‹Π·ΠΎΠ²Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ Π² Π±Π°ΠΉΡ‚Π°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ этот массив Π² памяти. На вопрос β€œΠ‘ΠΊΠΎΠ»ΡŒΠΊΠΎ чисСл Π²Ρ‹ Π²Π²Π΅Π΄Π΅Ρ‚Π΅ Π² массив?” ΠΎΡ‚Π²Π΅Ρ‚ΠΈΠΌ – 10. Π’ строкС 15, Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ amount * sizeof(int) станСт Ρ€Π°Π²Π½ΠΎΠ·Π½Π°Ρ‡Π½Ρ‹ΠΌ 10 * 4, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ функция sizeof(int) Π²Π΅Ρ€Π½Π΅Ρ‚ 4 (Ρ€Π°Π·ΠΌΠ΅Ρ€ Π² Π±Π°ΠΉΡ‚Π°Ρ… Ρ‚ΠΈΠΏΠ° int). Π”Π°Π»Π΅Π΅ Π²Π²Π΅Π΄Π΅ΠΌ числа с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚ ΠΈΡ… Π½Π° экран. ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ 4990 элСмСнтов Π±ΡƒΠ΄ΡƒΡ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π½ΡƒΠ»ΠΈ. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ Π½Π΅Ρ‚ смысла ΠΈΡ… ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ.

Главная информация Π½Π° экранС: массив занял 20 000 Π±Π°ΠΉΡ‚, Π° Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ для Π½Π΅Π³ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ 40 Π±Π°ΠΉΡ‚. Как Π²Ρ‹ΠΉΡ‚ΠΈ ΠΈΠ· этой ситуации? Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΊΠΎΠΌΡƒ-Ρ‚ΠΎ захочСтся ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ Π²Π²ΠΎΠ΄ΠΈΠ» Ρ€Π°Π·ΠΌΠ΅Ρ€ массива ΠΈ ΡƒΠΆΠ΅ послС Π²Π²ΠΎΠ΄Π° значСния ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ массив с Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌ количСством элСмСнтов. Но это Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±Π΅Π· ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ. Как Π²Ρ‹ ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅ – Ρ€Π°Π·ΠΌΠ΅Ρ€ массива Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ константой . Π’ΠΎ Π΅ΡΡ‚ΡŒ цСлочислСнная константа Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π° Π΄ΠΎ объявлСния массива ΠΈ ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ Π΅Ρ‘ Π²Π²ΠΎΠ΄ с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹. ΠŸΠΎΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ – ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅.


Π’ΡƒΡ‚ Π½Π°ΠΌ подсвСчиваСт красным ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ >> Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ константноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ нСльзя.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


Π’ΡƒΡ‚ нас ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°ΡŽΡ‚ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ массива НЕ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. НСобходимо константноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅!

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΊΠΎΠ΄Π΅ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΈ Π½ΠΎΠ²Ρ‹Π΅ для вас ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ new (выдСляСт ΠΏΠ°ΠΌΡΡ‚ΡŒ) ΠΈ delete (освобоТдаСт ΠΏΠ°ΠΌΡΡ‚ΡŒ).

Ρ€Π°Π·ΡƒΠΌΠ½ΠΎΠ΅ использованиС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти, примСняя ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ

#include #include using namespace std; int main() { setlocale(LC_ALL, "rus"); int sizeOfArray = 0; // Ρ€Π°Π·ΠΌΠ΅Ρ€ массива (Π²Π²Π΅Π΄Π΅Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ) cout << "Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ массив чисСл, Π²Π²Π΅Π΄ΠΈΡ‚Π΅ Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€: "; cin >> sizeOfArray; // Π’ΠΠ˜ΠœΠΠΠ˜Π•! int* arrWithDigits - объявлСниС указатСля // Π½Π° участок памяти, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ new int* arrWithDigits = new int ; for (int i = 0; i < sizeOfArray; i++) { arrWithDigits[i] = i + 1; cout << arrWithDigits[i] << " "; } cout << endl; delete arrWithDigits; // освобоТдСниС памяти return 0; }

#include

#include

using namespace std ;

int main ()

setlocale (LC_ALL , "rus" ) ;

int sizeOfArray = 0 ; // Ρ€Π°Π·ΠΌΠ΅Ρ€ массива (Π²Π²Π΅Π΄Π΅Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ)

cout << "Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ массив чисСл, Π²Π²Π΅Π΄ΠΈΡ‚Π΅ Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€: " ;

cin >> sizeOfArray ;

// Π’ΠΠ˜ΠœΠΠΠ˜Π•! int* arrWithDigits - объявлСниС указатСля

// Π½Π° участок памяти, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ new

int * arrWithDigits = new int [ sizeOfArray ] ;

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

arrWithDigits [ i ] = i + 1 ;

cout << arrWithDigits [ i ] << " " ;

cout << endl ;

delete arrWithDigits ; // освобоТдСниС памяти

return 0 ;

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Π²ΠΎΠ΄ΠΈΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ – строка 12. НиТС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ: int * arrWithDigits Π­Ρ‚Π° запись ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ arrWithDigits – это ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ. Он создан для хранСния адрСса ячСйки, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Ρ†Π΅Π»ΠΎΠ΅ число. Π’ нашСм случаС arrWithDigits Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° ячСйку массива с индСксом 0. Π—Π½Π°ΠΊ * – Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ‡Ρ‚ΠΎ примСняСтся ΠΏΡ€ΠΈ ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠΈ. По контСксту компилятор β€œΠΏΠΎΠΉΠΌΠ΅Ρ‚β€, Ρ‡Ρ‚ΠΎ это объявлСниС указатСля, Π° Π½Π΅ ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π”Π°Π»Π΅Π΅ слСдуСт Π·Π½Π°ΠΊ = ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ new , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выдСляСт участок памяти. ΠœΡ‹ ΠΏΠΎΠΌΠ½ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ нас ΠΏΠ°ΠΌΡΡ‚ΡŒ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π° ΠΏΠΎΠ΄ массив, Π° Π½Π΅ ΠΏΠΎΠ΄ ΠΎΠ΄Π½ΠΎ число. Π—Π°ΠΏΠΈΡΡŒ new int [ sizeOfArray ] ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ: new (Π²Ρ‹Π΄Π΅Π»ΠΈ ΠΏΠ°ΠΌΡΡ‚ΡŒ) int (для хранСния Ρ†Π΅Π»Ρ‹Ρ… чисСл) (Π² количСствС sizeOfArray ).

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π² строкС 16 Π±Ρ‹Π» ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½ динамичСский массив . Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΏΠΎΠ΄ Π½Π΅Π³ΠΎ выдСлится (ΠΈΠ»ΠΈ Π½Π΅ выдСлится) Π²ΠΎ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π° Π½Π΅ Π²ΠΎ врСмя компиляции, ΠΊΠ°ΠΊ это происходит с ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ массивами. Π’ΠΎ Π΅ΡΡ‚ΡŒ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти зависит ΠΎΡ‚ развития ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ нСпосрСдствСнно Π² Π΅Ρ‘ Ρ€Π°Π±ΠΎΡ‚Π΅. Π’ нашСм случаС – зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π²Π²Π΅Π΄Ρ‘Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ sizeOfArray

Π’ строкС 25 примСняСтся ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ delete . Он освобоТдаСт Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ new ΠΏΠ°ΠΌΡΡ‚ΡŒ. Π’Π°ΠΊ ΠΊΠ°ΠΊ new Π²Ρ‹Π΄Π΅Π»ΠΈΠ» ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΏΠΎΠ΄ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ массива, Ρ‚ΠΎ ΠΈ ΠΏΡ€ΠΈ Π΅Ρ‘ освобоТдСнии Π½Π°Π΄ΠΎ Π΄Π°Ρ‚ΡŒ ΠΏΠΎΠ½ΡΡ‚ΡŒ компилятору, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ массива, Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΅Π³ΠΎ Π½ΡƒΠ»Π΅Π²ΠΎΠΉ ячСйки, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ arrWithDigits . ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΠ΅ΠΆΠ΄Ρƒ delete ΠΈ ΠΈΠΌΠ΅Π½Π΅ΠΌ указатСля ставятся ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки – delete arrWithDigits ; Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° выдСляСтся ΠΏΠ°ΠΌΡΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ new , Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ эту ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ delete . ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΏΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠ°ΠΌΡΡ‚ΡŒ, занимаСмая Π΅ΠΉ, Π±ΡƒΠ΄Π΅Ρ‚ автоматичСски освобоТдСна. Но ΠΏΡƒΡΡ‚ΡŒ для вас станСт Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΉ ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡ΠΊΠΎΠΉ использованиС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² new ΠΈ delete Π² ΠΏΠ°Ρ€Π΅. Π’Π΅Π΄ΡŒ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ 5-6 массивов Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€. И Ссли Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Ρ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½Π° ΡƒΠΆΠ΅ Π½Π΅ потрСбуСтся Π² дальнСйшСм Π² Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ – ΠΏΠ°ΠΌΡΡ‚ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°ΡΡ…ΠΎΠ΄ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π·ΡƒΠΌΠ½ΠΎ.

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

Рассмотрим использованиС ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ, ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ . Для Π½Π°Ρ‡Π°Π»Π°, Π½Π°Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΈ ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄. Π’ Π½Π΅ΠΌ функция ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π΄Π²Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ внСсти измСнСния Π² ΠΈΡ… значСния.

ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Π΅ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ

#include #include using namespace std; void changeData(int varForCh1, int varForCh2); int main() { setlocale(LC_ALL, "rus"); int variableForChange_1 = 0; int variableForChange_2 = 0; cout << "variableForChange_1 = " << variableForChange_1 << endl; cout << "variableForChange_2 = " << variableForChange_2 << endl; cout << endl; changeData(variableForChange_1, variableForChange_2); cout << endl; cout << "variableForChange_1 = " << variableForChange_1 << endl; cout << "variableForChange_2 = " << variableForChange_2 << endl; return 0; } void changeData(int varForCh1, int varForCh2) { cout << "Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ: "; cin >> varForCh1; cout << "Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ: "; cin >> varForCh2; }

#include

#include

using namespace std ;

void changeData (int varForCh1 , int varForCh2 ) ;

int main ()

setlocale (LC_ALL , "rus" ) ;

int variableForChange_1 = 0 ;

int variableForChange_2 = 0 ;

cout << "variableForChange_1 = " << variableForChange_1 << endl ;

cout << "variableForChange_2 = " << variableForChange_2 << endl ;

cout << endl ;

changeData (variableForChange_1 , variableForChange_2 ) ;

cout << endl ;

cout << "variableForChange_1 = " << variableForChange_1 << endl ;

cout << "variableForChange_2 = " << variableForChange_2 << endl ;

return 0 ;

void changeData (int varForCh1 , int varForCh2 )

cout << "Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ: " ;

cin >> varForCh1 ;

cout << "Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ: " ;

cin >> varForCh2 ;

ЗапуститС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΈ Π²Π²Π΅Π΄ΠΈΡ‚Π΅ Π½ΠΎΠ²Ρ‹Π΅ значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. Π’Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Π² ΠΈΡ‚ΠΎΠ³Π΅, Ρ‡Ρ‚ΠΎ ΠΏΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π½Π΅ измСнились ΠΈ Ρ€Π°Π²Π½Ρ‹ 0.

Как Π²Ρ‹ ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, функция Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π΅ Π½Π° ΠΏΡ€ΡΠΌΡƒΡŽ с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ, Π° создаСт ΠΈΡ… Ρ‚ΠΎΡ‡Π½Ρ‹Π΅ ΠΊΠΎΠΏΠΈΠΈ. Π­Ρ‚ΠΈ ΠΊΠΎΠΏΠΈΠΈ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°ΡŽΡ‚ΡΡ послС Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’ΠΎ Π΅ΡΡ‚ΡŒ функция ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»Π° Π² Π²ΠΈΠ΄Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, создала Π΅Ρ‘ копию, ΠΏΠΎΡ€Π°Π±ΠΎΡ‚Π°Π»Π° с Π½Π΅ΠΉ ΠΈ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠΈΠ»Π°. Π‘Π°ΠΌΠ° пСрСмСнная останСтся ΠΏΡ€ΠΈ этом Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΠΎΠΉ.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ адрСса ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. Π’ΠΎΠ³Π΄Π° функция ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ нСпосрСдствСнно с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΏΠΎ адрСсу. ВнСсём измСнСния Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ.

ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ

#include #include using namespace std; void changeData(int* varForCh1, int* varForCh2); int main() { setlocale(LC_ALL, "rus"); int variableForChange_1 = 0; int variableForChange_2 = 0; cout << "variableForChange_1 = " << variableForChange_1 << endl; cout << "variableForChange_2 = " << variableForChange_2 << endl; cout << endl; changeData(&variableForChange_1, &variableForChange_2); cout << endl; cout << "variableForChange_1 = " << variableForChange_1 << endl; cout << "variableForChange_2 = " << variableForChange_2 << endl; return 0; } void changeData(int* varForCh1, int* varForCh2) { cout << "Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ: "; cin >> *varForCh1; cout << "Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ: "; cin >> *varForCh2; }