Массивдер компьютердик программаларда маалыматтарды сактоонун структураланган түрлөрүнүн бири болуп саналат. Аларды иштетүүнү класстык методдордо жана функцияларда жүзөгө ашырылган ар кандай алгоритмдер менен жасоого болот. Демек, бир функцияга массивди өткөрүп берүү талап кылынат. 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)
{
pNumbers [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:: вектор STLде ж.б.).
Көбүнчө бул класстар маалыматтар алмаштырылганда гана терең көчүрмөнү аткарып, маалыматтарды шилтеме менен эсептөө менен жашыруун маалымат бөлүшүү стратегиясын жүзөгө ашырышат (жазуу жүзүндө көчүрүп алуу). Бул функциялардын жана методдордун аргументтери аркылуу массив объекттерин мааниси боюнча өткөрүп берген учурда дагы, эсептөө ресурстарынын керектөөсүн минималдаштырууга мүмкүндүк берет:
void ArrayFunction (QVector oArray)
{
int nItemCount = oArray.count ();
int nItem = oArray [0];
}
void SomeFunction ()
{
QVector oArray (10);
for (int i = 0; i