Massivni Funktsiyaga Qanday O'tkazish Kerak

Mundarija:

Massivni Funktsiyaga Qanday O'tkazish Kerak
Massivni Funktsiyaga Qanday O'tkazish Kerak

Video: Massivni Funktsiyaga Qanday O'tkazish Kerak

Video: Massivni Funktsiyaga Qanday O'tkazish Kerak
Video: Massivni ekranga chiqarish 2024, Noyabr
Anonim

Massivlar kompyuter dasturlarida ma'lumotlarni saqlashning eng ko'p qo'llaniladigan shakllaridan biridir. Ularni qayta ishlash sinf usullari va funktsiyalarida amalga oshirilgan turli xil algoritmlar yordamida amalga oshirilishi mumkin. Shunga ko'ra, ko'pincha funktsiyaga massivni o'tkazish talab qilinadi. C va C ++ tillari ushbu amalni bajarish usullarini tanlashda katta erkinlikni taqdim etadi.

Massivni funktsiyaga qanday o'tkazish kerak
Massivni funktsiyaga qanday o'tkazish kerak

Bu zarur

C va C ++ tillarining kompilyatorlari

Ko'rsatmalar

1-qadam

Belgilangan kattalikdagi massivni funktsiyaga o'tkazing. Tegishli turdagi argumentni o'z ichiga olgan funktsiya prototipini o'zgartiring. Masalan, uchta elementning butun sonli qiymatlari qatorini parametr sifatida qabul qiladigan funktsiyani parametr sifatida e'lon qilish quyidagicha ko'rinishi mumkin:

void ArrayFunction (int aNumbers [3]);

Bunday funktsiya qatorni to'g'ridan-to'g'ri unga argument sifatida o'tkazish orqali chaqiriladi:

void SomeFunction ()

{

int aNumbers = {1, 2, 3};

ArrayFunction (aNumbers);

}

O'tkazilgan ma'lumotlar stakka ko'chiriladi. Chaqirilgan funktsiyadagi massivni o'zgartirish manbani o'zgartirmaydi.

2-qadam

O'zgaruvchan uzunlikdagi massivlarni funktsiyaga o'tkazing. Buni amalga oshirish uchun mos keladigan argumentning o'lchamini aniqlamang:

void ArrayFunction (int aNumbers );

Ko'p o'lchovli massivlar ham shunga o'xshash tarzda o'tkazilishi mumkin (faqat birinchi "o'lchov" o'zgaruvchilar bo'lishi mumkin):

void ArrayFunction (int aNumbers [3] [2]);

Ushbu funktsiyalar birinchi bosqichda bo'lgani kabi chaqiriladi.

Funktsiyada o'zgaruvchan uzunlikdagi massivlarni to'g'ri qayta ishlash uchun siz qo'shimcha ravishda ularning elementlari sonini o'tkazishingiz yoki elementlarning qiymatlariga cheklovlar qo'yadigan konventsiyalardan foydalanishingiz kerak (ma'lum bir qiymat) massiv oxirining belgisi bo'lishi kerak).

3-qadam

Massivni ko'rsatgich orqali o'tkazing. Funksiya argumenti massiv elementlariga mos keladigan tipdagi qiymatga ishora qiluvchi bo'lishi kerak. Masalan:

void ArrayFunction (int * pNumbers);

Funktsiyadagi ma'lumotlarga kirish qator elementlari bilan ishlash yozuvlarida ham, manzil arifmetikasi yordamida ham amalga oshirilishi mumkin:

bekor ArrayFunction (int * pNumbers)

{

pNumber [0] = 10; // 0-elementga kirish

* (pNumbers + 1) = 20; // 1-bandga kirish

}

Diqqatli bo'ling! Funktsiya ma'lumotlarning nusxasi emas, balki unga ko'rsatgich uzatilganligi sababli, asl massiv o'zgartiriladi.

Ushbu usulning afzalligi tezlik, hisoblash resurslarini tejash va ma'lum bir moslashuvchanlikdir. Shunday qilib, maqsad funktsiyani ko'rsatgichni massivning ixtiyoriy elementiga o'tkazib qo'ng'iroq qilishingiz mumkin:

void SomeFunction ()

{

int aNumbers = {1, 2, 3};

ArrayFunction (aNumbers); // butun qator

ArrayFunction (& aNumbers [1]); // ikkinchi elementdan boshlab

}

Ushbu usul, odatda, mavjud bo'lgan elementlar sonini qo'shimcha parametrga o'tkazishni yoki qator terminatoridan foydalanishni o'z ichiga oladi.

4-qadam

Parametr bilan funktsiyaga ma'lumotlarni uzatish yoki massivning funksionalligini amalga oshiradigan sinf ob'ektiga havola. Bunday sinflar yoki sinf shablonlari odatda mashhur kutubxonalarda va ramkalarda (Qt-da QVector, MFC-da CArray, STL-da std:: vektor va boshqalar) uchraydi.

Ko'pincha bu sinflar ma'lumotlarning aniq almashinish strategiyasini mos yozuvlar sanash bilan amalga oshiradilar va chuqur nusxasini faqat ma'lumotlar o'zgartirilganda amalga oshiradilar (yozishda nusxa olish). Bu funktsiya va usullarning argumentlari orqali massiv ob'ektlarini qiymat bo'yicha o'tkazishda ham hisoblash resurslari sarfini minimallashtirishga imkon beradi:

bekor ArrayFunction (QVector oArray)

{

int nItemCount = oArray.count ();

int nItem = oArray [0];

}

void SomeFunction ()

{

QVektor oArray (10);

uchun (int i = 0; i

Tavsiya: