Різниця між масивом та вказівником

Автор: Laura McKinney
Дата Створення: 1 Квітень 2021
Дата Оновлення: 13 Травень 2024
Anonim
С++. Різниця між посиланнями та вказівниками (reference vs pointer)
Відеоролик: С++. Різниця між посиланнями та вказівниками (reference vs pointer)

Зміст


Між масивом та вказівником існує тісний взаємозв'язок. Покажчик може бути використаний для доступу до елементів масиву, доступ до всього масиву за допомогою арифметики вказівника робить доступ швидшим. Існує основна різниця між вказівником та масивом, тобто масив - це сукупність змінних подібного типу даних, тоді як покажчик - це змінна, що зберігає адресу іншої змінної. Існують деякі інші відмінності між масивом і вказівником, які обговорюються нижче на таблиці порівняння.

  1. Порівняльна діаграма
  2. Визначення
  3. Ключові відмінності
  4. Висновок

Порівняльна діаграма

Основа для порівнянняМасивПокажчик
Декларація// В С ++
введіть var_name;
// На Java.
тип var-name;
var_name = новий тип;
// В С ++
введіть * var_name;
РобочийЗберігає значення змінної однорідного типу даних.Збережіть адресу іншої змінної того ж типу даних, що і тип даних змінних вказівника.
ПоколінняМожна створити масив покажчиків.Можна вказувати вказівник на масив.
Підтримка JavaПідтримайте концепцію масиву.Не підтримує покажчики.
ЗберіганняЗвичайний масив зберігає значення змінної, а масив вказівників зберігає адресу змінних.Покажчики спеціально розроблені для зберігання адреси змінних.
ЄмністьМасив може зберігати кількість елементів, згаданих у розмірі змінної масиву. Змінна вказівника може одночасно зберігати адресу лише однієї змінної.


Визначення масиву

Масив - це сукупність елементів одного типу даних, і всі ці елементи посилаються загальним іменем, що є назвою змінної масиву. Доступ до конкретного елемента масиву можна отримати за допомогою доступу до конкретного індексу того масиву, де цей елемент зберігається. Масиви можуть бути одновимірним масивом, двовимірним масивом або багатовимірним масивом. Масив покажчиків також може бути сформований, тобто масив, що містить всю змінну як змінну вказівника. У "C ++" масиви розподіляються статично, тоді як у "Java" масиви динамічно розподіляються.

// В C ++ введіть var_name; // На Java. тип var-name; var_name = новий тип;

Тут 'type' позначає тип даних змінної масиву, 'var_name' позначає ім'я, присвоєне змінної масиву, 'size' позначає ємність змінної масиву, тобто скільки елементів 'type' може зберігатися в цій змінній масиві . Існує два способи доступу до масиву, перший "арифметична вказівник" та другий "індексація масиву", з яких "арифметика вказівника" швидша.


// доступ за допомогою арифметичного покажчика Void display_array (int * S) {while (* s) {cout (<< "значення" << * s); * s ++; }}

Використання "арифметики вказівника" буде працювати швидше порівняно з "індексуванням масиву", тобто доступ до змінної масиву за допомогою її індексу. Якщо вам потрібно передати масив покажчиків у функцію, це можна зробити за допомогою того самого методу, який ви використовуєте для передачі звичайного масиву, тобто безпосередньо викликати функцію з іменем масиву без будь-якого індексу.

Давайте розберемося на прикладі

// Оголошення масиву покажчиків. int * p;

Тут видно, що 'p' - це масив цілого типу, він буде містити адресу 10 змінної цілого числа. Переведемо вищенаведений масив покажчиків у відображення функції ().

дисплей (р); // Виклик дисплея функції. недійсний дисплей (int * d) {// Функція, що приймає вказівний масив. for (int i = 0; i <10; i ++) {cout << ("індекс" <

Ця функція відображатиме значення, присутні у змінних, адреси яких зберігаються в цьому масиві покажчиків послідовно.

Визначення покажчика

Покажчик - це змінна, яка містить адресу пам'яті іншої змінної. Тип даних як змінної вказівника, так і змінної, адреса якої присвоюється змінній вказівника, повинен бути однаковим. Змінна вказівника так само задекларована, як наведено нижче.

// Декларація у назви типу C ++ *;

Тут "type" - це тип даних, "name" - це ім'я змінної вказівника. "Тип" визначає, яку адресу адреси змінної можна зберігати в змінній вказівника. Наприклад, цілочисельний покажчик буде зберігати адресу цілочисельної змінної. Є два оператори вказівників "*" та "&". Оператор "*" повертає значення, розташоване за адресою, яке зберігається у змінній, за якою знаком "*". Оператор "&" повертає адресу змінної, а потім знак "&".

// наприклад, int b = 10 int a = & b; // Тут адреса b зберігається у змінній a. // дозволяє адресу b дорівнювати 2000, тож тепер a = 2000. int c = * a; // Тут ціла змінна вказівник * a поверне значення, яке знаходиться за адресою, збереженою в .ie. c = 10.

Є лише два арифметичні оператори, які можна використовувати вказівниках, тобто додавання і віднімання. Якщо ви застосуєте приріст до цілочисленної змінної вказівника, він збільшиться на розмір типу даних, тобто на 2 байти, оскільки це цілий покажчик, на приріст йому доведеться вказати наступну цілочисленну змінну. Те саме стосується декременту.

// p - цілочисельний покажчик, що містить значення 2000. p ++; // зараз p = 2002. р--; // тепер p знову містить 2000, зменшені на два байти.

  1. Масив зберігає змінні подібних типів даних, а типи даних змінних повинні відповідати типу масиву. З іншого боку, змінна вказівника зберігає адресу змінної типу, подібної до типу змінної типу вказівника.
  2. Ми можемо генерувати масив покажчиків, тобто масив, змінними якого є змінні вказівники. З іншого боку, ми можемо створити вказівник, який вказує на масив.
  3. Java підтримує масив, але він не підтримує покажчики.
  4. Розмір масиву визначає кількість змінних, які він може зберігати, тоді як; змінна вказівника може зберігати адресу лише змінної

Примітка:

Java не підтримує та суворо уникає покажчиків.

Висновок:

Коли нам потрібно працювати над елементами даних подібного типу даних, то, замість того, щоб працювати окремо над змінними, ми можемо створити масив цих змінних подібних типів даних, а потім оперувати ним. Показники необхідні для якоїсь програми, вона дає величезну силу, але, на жаль, якщо вказівник містить неправильне значення, його буде найскладніше знайти.