връзката между масив и указател

S

Santoshalagawadi

Guest
по-горе тема за всички връзки, моля freinds

 
Указатели, разбира се, може да бъде "посочи" всеки тип обект на данни, включително и масиви.Макар, че е очевидно, когато се обсъжда програмата 3.1, важно е да се разшири за това как да направим това, когато става въпрос за многомерни масиви.

За да прегледате, в глава 2 се посочва, че даден масив от цели числа, точка бихме могли да е цяло число показалеца на този масив с помощта на:

Int * PTR;
PTR = & my_array [0]; / * точка нашите показалеца на първото
цяло число в нашата масива * /

Както посочихме там, вида на показалеца на променливата трябва да съответства на типа на първия елемент на масива.

В допълнение, ние можем да използваме указател като официална параметър на функция, която има за цел да манипулират масив.например

Като се има предвид:

Int масив [3] = (1, 5, 7);
нищожен a_func (INT * р);

Някои програмисти, може да предпочетете да пишат на прототип на функция, като:

нищожен a_func (INT п []);

, които ще са склонни да информира другите, които могат да използват тази функция, че тази функция е предназначена за манипулиране на елементи от масив.Разбира се, и в двата случая, това, което действително получава преминали е стойността на указател към първия елемент на масива, независимо от нотация, която се използва във функцията прототип или определение.Имайте предвид, че ако масива бройна система се използва, не е необходимо да се премине на реалните измерения на масива, тъй като ние не преминават целия масив, само адресът на първия елемент.

Ние сега се обръщат към проблема с размери 2 масив.Както е посочено в последната глава, C интерпретира 2 мерен масив като масив от едно измерение масиви.В този случай, на първия елемент от размерите 2 масив от цели числа е един мерен масив от цели числа.И показалеца на размерите два масива от цели числа, трябва да показалеца на този тип данни.Един от начините това да стане е чрез използването на ключовата дума "typedef".typedef възлага ново име на определен тип данни.Например:

typedef грозен байт Чар;

причинява име байт означава вид грозен знак.Все пак

байт б [10]; ще бъде масив от грозен символи.

Имайте предвид, че в typedef декларация, думата байт замени това, което би трябвало да е името на нашия грозен знак.Това означава, че правилото за използване на typedef е, че новото име на типа на данните е името, използвано при определянето на типа на данните.Така в:

typedef Int Array [10];

Array става тип данни за масив от 10 числа.т.е. Array my_arr; декларира my_arr като масив от 10 числа и масиви arr2d [5]; прави arr2d масив от 5 масив от 10 числа всяка.

Също така имайте предвид, че Array * p1d; прави p1d указател към масив от 10 числа.Защото * p1d пункта до същия тип като arr2d, раздаване на адреса на размерите два масива arr2d да p1d, показалецът се до размерите един масив от 10 числа е приемливо.т.е. p1d = & arr2d [0]; или p1d = arr2d; и двете са верни.

От типа на данните, които използваме за нашите показалеца е масив от 10 числа можем да очакваме, че увеличаване p1d до 1 ще се промени стойността му от 10 * sizeof (INT), което го прави.Това е, sizeof (* p1d) е 20.Можете да го докаже на себе си в писмена форма и тичане просто кратка програма.

Сега, докато използвате typedef прави нещата ясно за читателя и по-лесно за програмист, то не е наистина необходимо.Какво се нуждаем, е начин за обявяване на показалеца като p1d без да има нужда от typedef ключова дума.Оказва се, че това може да стане и че

Int (* p1d) [10];

е правилното декларация, т.е. p1d тук е указател към масив от 10 цели числа, точно както го бе под декларация, като използва типа масиви.Имайте предвид, че това е различно от

Int p1d * [10];

, което ще направи p1d името на масив от 10 указатели към тип Int.

 
Santoshalagawadi написа:

по-горе тема за всички връзки, моля freinds
 

Welcome to EDABoard.com

Sponsor

Back
Top