pointers pointer operations c
Інтенсивне вивчення покажчиків та їх використання в C ++.
Покажчик - одна з найпотужніших функцій мови С ++. Покажчик допомагає маніпулювати змінними через свою адресу.
запитання співбесіди довідкової служби рівня 1
У цьому підручнику ми детально дослідимо все про вказівники та їх використання в C ++.
=> Зверніть увагу на прості навчальні серії C ++ тут.
Що ви дізнаєтесь:
- Що таке вказівник?
- Арифметика покажчика
- Нульові та порожні покажчики
- Масиви та покажчики
- Масив покажчиків
- Покажчик покажчиків
- Передача покажчиків на функції
- Покажчики функцій
- Висновок
- Рекомендована література
Що таке вказівник?
Покажчик - це змінна, яка містить адресу місця в пам'яті. Ми знаємо, що всі змінні, які ми оголошуємо, мають певну адресу в пам'яті. Ми оголошуємо змінну покажчика, яка вказує на ці адреси в пам'яті.
Загальний синтаксис для оголошення змінної покажчика:
datatype * variable_name;
Наприклад, декларації int * ptr;
Це означає, що ptr - це покажчик, який вказує на змінну типу int. Отже, змінна покажчика завжди містить розташування пам'яті або адресу. Давайте розглянемо роботу змінних покажчика нижче.
Зверніть увагу, що ми маємо такі декларації:
Int p, *ptr; //declare variable p and pointer variable ptr p = 4; //assign value 4 to variable p ptr = &p; //assign address of p to pointer variable ptr
На згадку ці декларації будуть представлені наступним чином:
Це внутрішнє представлення покажчика в пам'яті. Коли ми призначаємо змінну адреси змінній покажчика, вона вказує на змінну, як показано у поданні вище.
Оскільки ptr має адресу змінної p, * ptr дасть значення змінної p (змінної, на яку вказує змінна вказівника ptr).
Примітка: Оператор *, який ми використовуємо з покажчиком, використовується для позначення того, що він є змінною покажчика.
Давайте побачимо деякі поняття покажчиків, які використовуються в C ++.
Арифметика покажчика
Ми знаємо, що змінна покажчика завжди вказує на адресу в пам'яті. Серед операцій, які ми можемо виконати, є такі арифметичні дії, які виконуються над покажчиками.
- Інкрементний оператор (++)
- Оператор зменшення (-)
- Додавання (+)
- Віднімання (-)
Давайте подивимося використання цих операцій у прикладі програми.
#include #include using namespace std; int main() { int myarray(5) = {2, 4,6, 8,10}; int* myptr; myptr = myarray; cout<<'First element in the array :'<<*myptr< Вихід:
Перший елемент у масиві: 2
наступний елемент у масиві: 4
наступний елемент у масиві: 6
наступний елемент у масиві: 4
наступний елемент у масиві: 2
Ми бачили арифметичні дії, що виконуються над покажчиками. Зверніть увагу, що оператор приросту ++ збільшує покажчик і вказує на наступний елемент масиву. Подібним чином оператор зменшення зменшує покажчик змінної на 1 так, щоб він вказував на попередній елемент у масиві.
Ми також використовуємо оператори + та -. По-перше, ми додали 1 до змінної покажчика. Результат показує, що він вказує на наступний елемент масиву. Подібним чином, - оператор робить змінну покажчика для вказівки на попередній елемент масиву.
Окрім цих арифметичних операторів, ми також можемо використовувати оператори порівняння, такі як ==,.
Нульові та порожні покажчики
Якщо у випадку, якщо змінної вказівника не присвоєна адреса змінної, то є гарною практикою присвоєння змінної покажчика значення NULL. Змінна покажчика зі значенням NULL називається покажчиком NULL.
Нульовий покажчик - це постійний покажчик зі значенням нуль, визначеним у заголовку iostream. Пам'ять за адресою 0 зарезервована операційною системою, і ми не можемо отримати доступ до цього місця.
Використовуючи нульовий покажчик, ми можемо уникнути неправильного використання невикористаних покажчиків та запобігти присвоєнню змінним покажчика деяких значень сміття.
Порожні вказівники - це спеціальні вказівники, які вказують на значення без типу. Порожні покажчики є більш гнучкими, оскільки вони можуть вказувати на будь-який тип. Але вони не можуть бути безпосередньо розменовані. Для розмежування посилань void потрібно перетворити на покажчик, який вказує на значення з конкретним типом даних.
Ми показали роботу вказівника NULL і void у наступному прикладі коду.
#include #include using namespace std; int main() { int intvar = 10; char c = 'A'; void* vptr; int* myptr = NULL; cout<<'NULL pointer value :'< Вихід:
Значення покажчика NULL: 0
Вказівник порожнечі vptr вказує на: A
Вказівник порожнечі vptr вказує на: 10
У наведеній вище програмі спочатку ми оголошуємо цілочисельний покажчик, якому присвоєно значення NULL. Коли ми друкуємо цей покажчик, ми бачимо, що значення дорівнює 0, як ми вже обговорювали раніше.
Далі ми оголошуємо порожній покажчик. Спочатку ми призначаємо адресу символьної змінної цьому порожньому покажчику. Потім ми призначаємо покажчик void покажчику символів і вводимо його символом char *. Далі ми друкуємо значення charptr, яке вказує на символ A, який був змінною символу, про яку ми оголосили раніше, і вказується показником void.
Далі ми призначили цілочисельну змінну показнику void, а потім виконуємо ті самі кроки розмежування цього порожнього покажчика за допомогою цілочисельного покажчика.
Масиви та покажчики
Масиви та покажчики тісно пов'язані між собою. Ми знаємо, що ім'я масиву вказує на перший елемент масиву, і це постійний вказівник.
Ми можемо призначити цей покажчик змінній покажчика, а потім отримати доступ до масиву або шляхом зменшення покажчика, або за допомогою оператора індексу.
Ми побачимо цю асоціацію між змінною покажчика та масивом у наступному прикладі коду.
#include #include using namespace std; int main() { int myarray(5) = {1, 1, 2, 3, 5}; int* ptrvar; ptrvar = myarray; for(int i=0;i<5;i++) { cout<<*ptrvar<<' '; ptrvar++; } return 0; }
Вихід:
1 1 2 3 5
У наведеній вище програмі ми присвоюємо ім’я масиву змінній покажчика. Оскільки ім’я масиву вказує на перший елемент масиву, ми можемо надрукувати вміст усього масиву, використовуючи змінну покажчика, і збільшувати його за допомогою оператора ++. Це показано в результатах.
Масив покажчиків
Іноді нам потрібно більше однієї змінної покажчика в програмі. Замість того, щоб оголошувати кожну окрему змінну покажчика, ми можемо оголосити масив покажчиків.
Давайте негайно візьмемо приклад, щоб продемонструвати безліч покажчиків.
#include #include using namespace std; int main() { int myarray(5) = {2,4,6,8,10}; int *ptr(5); //array of pointers for(int i=0;i<5;i++){ ptr(i) = &myarray(i); } for (int i = 0; i < 5; i++) { cout << 'Value of myarray(' << i << ') = '; cout << *ptr(i) << endl; } return 0; }
Вихід:
Значення myarray (0) = 2
Значення myarray (1) = 4
Значення myarray (2) = 6
Значення myarray (3) = 8
Значення myarray (4) = 10
У вищезазначеній декларації
як зробити графік в Java - -
int * ptr (5);
Ми можемо інтерпретувати як; ptr - це масив із 5 цілочисельних покажчиків. Отже, кожен елемент ptr буде вказувати на змінну цілого типу.
Ми використовуємо цілочисельний масив і присвоюємо адресу кожного елемента масиву кожному з елементів ptr. Потім ми відображаємо вміст масиву ptr, виводячи “* ptr (i)”.
Покажчик покажчиків
Покажчик покажчиків - це не що інше, як множинні непрямі. Це свого роду ланцюжок покажчиків. Коли ми визначаємо покажчик покажчиків, перший вказівник має адресу другого вказівника, який, у свою чергу, має адресу змінної, на яку він вказує.
У пам'яті це буде представлено у вигляді:

Покажчик покажчиків оголошується наступним чином:
int** intptr;
Ми безпосередньо беремо Приклад коду, щоб краще зрозуміти вказівник покажчиків.
#include #include using namespace std; int main() { int *vptr; int ** intptr; int var = 10; vptr = &var; intptr = &vptr; cout<<'Variable var: '< Вихід:
Змінна змінна: 10
Вказівник на змінну: 10
Вказівник на вказівник на змінну: 10
У наведеній вище програмі ми оголошуємо цілочисельну змінну, цілочисельний покажчик та покажчик покажчика на ціле число. Як показано в програмі, змінної покажчика присвоюється значення змінної. Покажчику змінної покажчика присвоюється адреса змінної покажчика.
Врешті-решт, ми друкуємо три змінні, які відображають одне і те ж значення 10, що дорівнює цілій змінній.
Передача покажчиків на функції
Передача покажчиків функціонуванню - це те саме, що й інші методи передачі параметрів, при яких ми передаємо змінні покажчика функції.
Ми переглядаємо обмін двох значень і модифікуємо його, щоб передавати змінні покажчика як параметри.
#include #include using namespace std; void swap(int* a, int* b) { int temp; temp = *a; *a = *b; *b = temp; } int main() { int a, b; cout<>a>>b; cout<<'a = '< Вихід:
Введіть значення, які слід поміняти місцями: 3 2
a = 3 b = 2
Поміняні місцями значення
a = 2 b = 3
Як показано в програмі, ми передаємо значення, що підлягають обміну, як цілісні змінні. Формальні параметри визначаються як змінні покажчика. В результаті цього зміни, внесені до змінних всередині функцій, відображаються зовні і у функції, що викликає.
Покажчики функцій
так само, оскільки ми маємо вказівники на змінні, масиви тощо, ми можемо мати вказівники на функції. Але різниця полягає в тому, що покажчик функції вказує на виконуваний код, а не на дані, такі як змінні або масиви.
Ми беремо приклад, щоб продемонструвати покажчики функцій.
#include #include using namespace std; void displayVal(int a) { printf('Value of a is %d
', a); } int main() { void (*func_ptr)(int) = &displayVal; (*func_ptr)(100); return 0; }
Вихід:
Значення a дорівнює 100
c програмування запитань та відповідей на інтерв’ю
У наведеній вище програмі ми маємо функцію ‘displayVal’, яка просто друкує ціле число, передане їй. В основній функції ми визначили покажчик функції ‘func_ptr’, який приймає int як аргумент і повертає тип void.
void (* func_ptr) (int)
Примітка: Нам потрібно вкласти покажчик функції всередину (). Якщо його опустити, він стане прототипом функції.
Ми вказали адресу функції ‘displayVal’ цьому покажчику функції. Потім, використовуючи цей покажчик функції „func_ptr”, ми передаємо значення аргументу 100, що еквівалентно виклику displayVal з аргументом 100.
Тепер, якщо ми маємо іншу функцію з тим самим прототипом, тоді ми можемо використовувати той самий покажчик функції, присвоївши їй адресу функції. Це основне використання покажчиків на функції.
Висновок
Це все про вказівники, їх визначення та використання в C ++.
У нашому наступному підручнику ми дізнаємось більше про посилання на C ++. Посилання також спеціально використовуються в C ++ і часто використовуються як псевдоніми змінних.
=> Клацніть тут, щоб переглянути абсолютну серію навчальних програм C ++.
Рекомендована література