Скачиваний:
0
Добавлен:
20.09.2026
Размер:
586 Кб
Скачать
☆
alıwshı parametr arqalı. Kórsetkish arqalı jazılǵanda formal parametr tipinen keyin „*‟ belgisi jazıladı, sáykes argumentte bolsa ózgeriwshiniń adresi (& ámel arqalı) yaki massiv atı, yaki funkciya atı bolıwı múmkin.
Adresti alıw ámeli arqalı parametr uzatıwda formal parametrde tipinen keyin „&‟ belgisi jazıladı hám funkciya shaqırılıwında sáykes argument retinde ózgeriwshi atı keledi.
Mısal:
#include <iostream.h>
void f(int, int*, int &)
void main()
{
int i = 1, j = 2, k = 3;
cout << I << ” “ << j << ” “ << k;
f(i, &j, k);
cout << i << ” “ << j << ” “ << k;
}
void f(int i, int *j, int &k)
{
i++;
(*j)++;
k++;
*j = i + k;
k = *j + i;
}
Programma islewi nátiyjesinde ekranǵa tómendegi parametrler shıǵarıladı:
1 2 3
1 6 8
Bul mısalda birinshi parametr i mánis penen uzatıladı (“int i"). Onıń mánisi funkciya ishinde ózgeredi, lekin sırttaǵı i ózgeriwshisiniń mánisi ózgermeydi. Ekinshi parametrdi kórsetkish arqalı adresi menen uzatılıwı talap etiledi (“int *j”), adresti uzatıw ushın „&‟ – adresin alıw ámeli qollanılǵan (“&j”). Funkciya denesinde argument adresinen mánis alıw ushın „*‟ – mánis alıw ámeli qollanılǵan. Úshinshi parametrde múráját arqalı (“&k”) argumentiniń adresin uzatıw kózde tutılǵan. Bul jaǵdayda funkciya shaqırılıwında sáykes argument ornında ózgeriwshi atı turadı, funkciya ishinde bolsa mánis alıw ámelin qollanıwdıń qájeti
joq. Funkciya qollanıw nátiyjesindegi mánislerdi argumentler dizimi arqalı alıw qolaylı hám túsinerli usıl bolıp tabıladı.
Dinamikalıqalıq massivler menen islew
Statikalıq massivlerdiń kemshiligi sonda, olardıń ólshemleri aldınnan belgili bolıwı kerek, bunnan tısqarı bul ólshemler berilgenlerge ajıratılǵan yad segmentiniń ólshemi menen shegaralanǵan. Ekinshi tárepten, jeterli dárejede úlken ólshemdegi massiv járiyalanıp, konkret másele sheshiliwinde ajıratılǵan yad tolıq isletilmewi múmkin. Bul kemshilikler dinamikalıqalıq massivlerden paydalanıw arqalı saplastırıladı, sebebi olar programma islewi waqtında kerek bolǵan ólshemdegi massivlerdi jaratıw hám zárúrlik qalmaǵanda óshiriw imkanyatın
beredi.
Dinamikalıqalıq massivlerge yad ajıratıw ushın malloc(), calloc()
funkсiyalarınan yamasa new operatorınan paydalanıw múmkin. Dinamikalıq obyektke ajıratılǵan yadtı bosatıw ushın free() funkсiyası yáki delete operatorı
isletiledi.
Joqarıda berilgen funkсiyalar «alloc.h» kitapxanasında jaylasqan.
malloc() funkсiyasınıń sintaksisi
void * malloc (size_t size);
kórinisinde bolıp, ol yadtıń uyım bóleginen size bayt ólshemindegi úzliksiz aymaqtı ajıratadı. Eger yad ajıratıw sátli bolsa, malloc() funkciyası ajıratılǵan aymaqtıń baslanıw adresin qaytaradı. Talap etilgen yadtı ajıratiw sátsiz bolsa, funkciya NULL mánisin qaytaradı.
Sintaksisten kórinip turıptı, funkciya void tipindegi mánis qaytaradı. Ámelde bolsa konkret tiptegi obyekt ushın yad ajıratıw zárúr boladı. Bunıń ushın void tipin konkret tipke keltiriw texnologiyasınan paydalanıladı. Máselen, pútin tiptegi uzınlıǵı 3 ke teń massivke orın ajıratıwdı tómendegishe ámelge asırıw múmkin:
int * pInt = (int*)malloc(3 * sizeof(int));
calloc() funkciyası malloc() funkciyasınan parıqlı túrde massiv ushın orın ajıratıwdan tısqarı massiv elementlerin 0 mánisi menen inicializaciya qıladı. Bul
funkciya sintaksisi
void * calloc(size_t num, size_t size);
kórinisinde bolıp, num parametri ajıratılǵan aymaqta neshe element barlıǵın, size hár bir element ólshemin bildiredi.
free() yadtı bosatıw funkciyası óshiriletuǵın yad bólegine kórsetkish bolǵan
jalǵız parametrge iye boladı:
void free(void * block);
free() funkciyası parametriniń void tipinde bolıwı qálegen tiptegi yad bólegin óshiriw imkanın beredi.
Tómendegi programmada 10 dana pútin sannan ibarat dinamikalıqalıq massiv jaratıw, oǵan mánis beriw hám óshiriw ámelleri orınlanǵan.
#include <iostream.h>
#include <alloc.h>
int main()
{
int *pVector;
if((pVector = (int*)malloc(10 * sizeof(int))) == NULL)
{
cout << ”yad jeterli emes!!!”;
return 1;
}
/
/ajıratılǵan yad aymaǵın toltırıw
for(int i = 0; i < 10; i++)
(pVector + i) = i;
/vektor elementlerin shıǵarıw
*
/
for(int i = 0; i < 10; i++)
cout << *(pVector + i) << endl;
//ajıratılǵan yad bólegin óshiriw
free(pVector);
return 0;
}
Funkciya hám massivler
Funkciyalar massivti parametr sıpatında isletiwi hám onı funkciyanıń nátiyjesi sıpatında qaytarıwı múmkin.
Eger massiv parametr arqalı funkciyaǵa uzatılsa, elementler sanın anıqlaw mashqalası júzege keledi, sebebi massiv atınan onıń uzınlıǵın anıqlawdıń ilájı joq. Ayrım jaǵdaylarda, máselen, belgiler massivi sıpatında anıqlanǵan qatar (ASCIIZ qatarlar) menen islegende massiv uzınlıǵın anıqlaw múmkin, sebebi qatarlar „\0‟ belgisi menen tamamlanadı.
Mısalı ushın:
#include<iostream>
int len(char s[]) //massivti parametr sıpatında isletiw
{
int m = 0;
while(s[m++])
return m-1;
}
void main()
{
char z[] = ”Usı qatar uzınlıǵı = ”;
cout << z << len(z);
}
Funkciya parametri qatar bolmaǵan jaǵdaylarda fiksirlengen uzınlıqtaǵı massivler isletiledi. Eger túrli uzınlıqtaǵı massivlerdi uzatıw zárúr bolsa, massiv ólshemlerin parametr sıpatında uzatıw múmkin yáki bul maqsette global ózgeriwshiden paydalanıwǵa tuwrı keledi.
Mısalı:
#include<iostream.h>
float sum(int n, float *x)
{
float s = 0;
for(int i = 0; i < n; i++)
s += x[i];
return s;
}
void main()
{
float E[] = {1.2, 2.0, 3.0, 4.5, -4.0};
cout << sum(5, E);
}
Massiv atı kórsetkish bolǵanlıǵı sebepli massiv elementlerin funkciyada ózgertiw múmkin hám bul ózgertiwler funkciyadan shıqqannan keyin de saqlanıp qaladı.
#include<iostream>
void vector_01(int n, int *x, int *y)
{
for (int i = 0; i < n; i++)
y[i] = x[i] > 0 ? 1 : 0;
}
void main()
{
int a[] = (1, 2, -4, 3, -5, 0, 4};
int c[7];
vector_01(7, a, c);
for(int i = 0; i < 7; i++)
cout << ’\t’ << c[i];
}
Másele. Pútin tiptegi hám elementleri kemeymeytuǵın halda tártiplengen bir ólshemli eki massivlerdi jalǵız massivke, tártipleniwi saqlanǵan halda birlestiriw ámelge asırılsın.
Programma kodı:
#include<iostream.h>
//pútin tiptegi massivke kórsetkish qaytaratuǵın funkciya
int *massiv_jalǵaw(int, int*, int, int*);
void main()
{
int c[] = {-1, 2, 5, 10}, d[] = {1, 7, 8};
int *h;
h = massiv_jalǵaw(5, c, 3, d);
for(int i = 0; i < 8; i++)
cout << ’\t’ << h[i];
delete []h;
}
int *massiv_jalǵaw(int n, int *a, int m, int *b)
{
int *x = new int[n + m];
int ia = 0, ib = 0, ix = 0;
while(ia < n && ib < m)
a[ia]> b[ib] ? x[ix++] = b[ib++] : x[ix++] =
a[ia++];
while(ib < m)
x[ix++] = b[ib++];
while(ia < n)
x[ix++] = a[ia++];
return x; }
Соседние файлы в папке 1-semestr