Ц ++ показивачи и низови

У овом упутству ћемо научити о односу између низова и показивача уз помоћ примера.

У Ц ++, показивачи су променљиве које садрже адресе других променљивих. Показивач не само да може да ускладишти адресу једне променљиве, већ може да ускладишти и адресу ћелија низа.

Размотрите овај пример:

 int *ptr; int arr(5); // store the address of the first // element of arr in ptr ptr = arr;

Овде је птр променљива показивача, док је арр intниз. Код ptr = arr;чува адресу првог елемента низа у променљивој птр.

Приметите да смо користили arrуместо &arr(0). То је зато што су оба иста. Дакле, код испод је исти као и код горе.

 int *ptr; int arr(5); ptr = &arr(0);

Адресе за остатак елемената арраи су дати &arr(1), &arr(2), &arr(3)и &arr(4).

Покажите на све елементе низа

Претпоставимо да треба да покажемо на четврти елемент низа користећи исти показивач птр.

Овде, ако птр показује на први елемент у горњем примеру, тада ptr + 3ће указивати на четврти елемент. На пример,

 int *ptr; int arr(5); ptr = arr; ptr + 1 is equivalent to &arr(1); ptr + 2 is equivalent to &arr(2); ptr + 3 is equivalent to &arr(3); ptr + 4 is equivalent to &arr(4);

Слично томе, елементима можемо приступити помоћу јединственог показивача. На пример,

 // use dereference operator *ptr == arr(0); *(ptr + 1) is equivalent to arr(1); *(ptr + 2) is equivalent to arr(2); *(ptr + 3) is equivalent to arr(3); *(ptr + 4) is equivalent to arr(4);

Претпоставимо да смо иницијализована ptr = &arr(2);онда

 ptr - 2 is equivalent to &arr(0); ptr - 1 is equivalent to &arr(1); ptr + 1 is equivalent to &arr(3); ptr + 2 is equivalent to &arr(4);
Рад показивача Ц ++ са низовима

Напомена: Адреса између птр и птр + 1 разликује се за 4 бајта. То је зато што је птр показивач на intподатак. И, величина инт је 4 бајта у 64-битном оперативном систему.

Слично томе, ако показивач птр показује на charподатке типа, тада је адреса између птр и птр + 1 1 бајт. То је зато што је величина знака 1 бајт.

Пример 1: Ц ++ показивачи и низови

 // C++ Program to display address of each element of an array #include using namespace std; int main() ( float arr(3); // declare pointer variable float *ptr; cout << "Displaying address using arrays: " << endl; // use for loop to print addresses of all array elements for (int i = 0; i < 3; ++i) ( cout << "&arr(" << i << ") = " << &arr(i) << endl; ) // ptr = &arr(0) ptr = arr; cout<<"Displaying address using pointers: "<< endl; // use for loop to print addresses of all array elements // using pointer notation for (int i = 0; i < 3; ++i) ( cout << "ptr + " << i << " = "<< ptr + i << endl; ) return 0; )

Оутпут

 Приказивање адресе помоћу низова: & арр (0) = 0к61феф0 & арр (1) = 0к61феф4 & арр (2) = 0к61феф8 Приказивање адресе помоћу показивача: птр + 0 = 0к61феф0 птр + 1 = 0к61феф4 птр + 2 = 0к61феф8

У горњем програму прво смо једноставно исписали адресе елемената низа без употребе показивачке променљиве птр.

Затим смо користили показивач птр за указивање на адресу а (0), ptr + 1за указивање на адресу а (1) итд.

У већини контекста, имена низа се распадају до показивача. Једноставним речима, називи низова се претварају у показиваче. То је разлог зашто можемо користити показиваче за приступ елементима низова.

Међутим, треба имати на уму да показивачи и низови нису исто.

Постоји неколико случајева када се називи низова не распадају до показивача. Да бисте сазнали више, посетите: Када се име низа не распада у показивач?

Пример 2: Име низа се користи као показивач

 // C++ Program to insert and display data entered by using pointer notation. #include using namespace std; int main() ( float arr(5); // Insert data using pointer notation cout << "Enter 5 numbers: "; for (int i = 0; i > *(arr + i) ; ) // Display data using pointer notation cout << "Displaying data: " << endl; for (int i = 0; i < 5; ++i) ( // display value of arr(i) cout << *(arr + i) << endl ; ) return 0; )

Оутпут

 Унесите 5 бројева: 2,5 3,5 4,5 5 2 Приказивање података: 2,5 3,5 4,5 5 2

Ево,

  1. Прво смо користили ознаку показивача за чување бројева које је корисник унео у низ поља.

     cin>> *(arr + i) ;

    Овај код је еквивалентан доњем коду:

     cin>> arr(i);

    Приметите да нисмо прогласили засебну променљиву показивача, већ користимо име низа арр за ознаку показивача.

    Као што већ знамо, име низа арр показује на први елемент низа. Дакле, о арр-у можемо размишљати као о показивачу.

  2. Слично томе, тада смо користили forпетљу за приказ вредности арр користећи ознаку показивача.

     cout << *(arr + i) << endl ;

    Овај код је еквивалентан

     cout << arr(i) << endl ;

Занимљиви Чланци...