Массив нь компьютерийн програмуудад хамгийн их ашиглагддаг бүтэцлэгдсэн өгөгдөл хадгалах хэлбэрүүдийн нэг юм. Тэдгээрийн боловсруулалтыг ангийн арга, функцэд хэрэгжүүлсэн янз бүрийн алгоритмаар хийж болно. Тиймээс функцэд массив дамжуулах шаардлагатай байдаг. C ба C ++ хэлнүүд энэ үйлдлийг гүйцэтгэх аргыг сонгоход маш их эрх чөлөөг өгдөг.
Энэ нь зайлшгүй шаардлагатай
C ба C ++ хэлийг хөрвүүлэгч
Зааварчилгаа
1-р алхам
Тогтмол хэмжээтэй массивыг функцэд дамжуулна. Тохирох төрлийн аргументыг агуулахын тулд функцийн анхны загварыг өөрчил. Жишээлбэл, гурван элементийн бүхэл тоон утгын массивыг параметр болгон авах функцийг тунхаглах нь дараах байдалтай байж болно:
void ArrayFunction (int aNumbers [3]);
Ийм функцийг аргумент болгон массивыг шууд дамжуулж дууддаг.
void SomeFunction ()
{
int aNumbers = {1, 2, 3};
ArrayFunction (aNumbers);
}
Шилжүүлсэн өгөгдлийг стек дээр хуулж авдаг. Дуудсан функцэд массивыг өөрчлөх нь эх үүсвэрийг өөрчлөхгүй.
Алхам 2
Хувьсах урттай массивуудыг функцэд дамжуулна. Үүнийг хийхийн тулд харгалзах аргументийн хэмжээг зааж өгөхгүй байх хэрэгтэй.
void ArrayFunction (int aNumbers );
Олон хэмжээст массивыг мөн ижил төстэй байдлаар дамжуулж болно (зөвхөн эхний "хэмжээ" нь хувьсагч байж болно):
void ArrayFunction (int aNumbers [3] [2]);
Эдгээр функцуудыг эхний алхамтай ижил аргаар дууддаг.
Функцэд хувьсах урттай массивыг зөв боловсруулахын тулд тэдгээрийн элементийн тоог нэмэлт параметрээр дамжуулж, эсвэл элементийн утгыг хязгаарлах конвенцийг ашиглах хэрэгтэй (тодорхой утга массивын төгсгөлийн тэмдэг байх ёстой).
Алхам 3
Массивыг заагчаар дамжуулна. Функцийн аргумент нь массивын элементүүдэд тохирох төрөл бүхий утгын заагч байх ёстой. Жишээлбэл:
void ArrayFunction (int * pNumbers);
Функцэд өгөгдөлд хандах хандалтыг массивын элементүүдтэй ажиллах тэмдэглэгээний аль алинд нь болон хаягийн арифметик ашиглан хийж болно.
void ArrayFunction (int * pNumbers)
{
pNumber [0] = 10; // 0 элементэд нэвтрэх
* (pNumbers + 1) = 20; // 1-р зүйлд нэвтрэх
}
Болгоомжтой байгаарай! Функц нь өгөгдлийн хуулбар биш харин түүнд заагч дамжуулагдах тул анхны массив өөрчлөгдөх болно.
Энэ аргын давуу тал бол хурд, тооцооллын нөөцийг хэмнэх, тодорхой уян хатан байдал юм. Тиймээс та зорилтот функцийг массивын дурын элементэд заагч дамжуулж дуудаж болно:
void SomeFunction ()
{
int aNumbers = {1, 2, 3};
ArrayFunction (aNumbers); // бүхэл бүтэн массив
ArrayFunction (& aNumbers [1]); // хоёр дахь элементээс эхэлнэ
}
Энэ арга нь ихэвчлэн боломжтой параметрүүдийн тоог нэмэлт параметрт дамжуулах эсвэл массивын төгсгөлийг ашиглах явдал юм.
Алхам 4
Массивын функцийг хэрэгжүүлдэг обьект эсвэл ангийн объектын лавлагаа бүхий параметр бүхий функцэд өгөгдлийг дамжуулах. Ийм анги эсвэл ангийн загварыг ихэвчлэн алдартай номын сан, фрэймворкт олдог (Qt-д QVector, MFC-д CArray, STL-д STD:: вектор гэх мэт).
Ихэнхдээ эдгээр ангиуд нь өгөгдөл өөрчлөгдсөн тохиолдолд л гүнзгий хуулбарыг гүйцэтгэж, лавлагаа тоолох замаар далд мэдээлэл хуваалцах стратеги хэрэгжүүлдэг. Энэ нь функц ба аргуудын аргументуудаар массивын объектуудыг утга дамжуулах тохиолдолд тооцооллын нөөцийн хэрэглээг багасгах боломжийг танд олгоно.
void ArrayFunction (QVector oArray)
{
int nItemCount = oArray.count ();
int nItem = oArray [0];
}
void SomeFunction ()
{
QVector oArray (10);
for (int i = 0; i