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

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

Видео: Разлика между указател и масив

Видео: Разлика между указател и масив
Видео: Указатели c++ что это. Для чего нужны. Указатели c++ разыменование. C++ для начинающих. Урок #46 2024, Юли
Anonim

Показател срещу масив

Указателят е тип данни, който съдържа препратка към място в паметта (т.е. променливата на указателя съхранява адрес на място в паметта, в което се съхраняват някои данни). Масивите са най-често използваната структура от данни за съхраняване на колекция от елементи. Повечето езици за програмиране предоставят методи за лесно деклариране на масиви и достъп до елементи в масивите.

Какво е указател?

Указателят е тип данни, който съхранява адрес на място в паметта, в което се съхраняват някои данни. С други думи, указателят съдържа препратка към място в паметта. Достъпът до данните, съхранени в местоположението на паметта, което е посочено от указателя, се нарича дерефериране. Когато извършвате повтарящи се операции, като преминаване през дървета/низове, търсене в таблици и т.н., използването на указатели би подобрило производителността. Това е така, защото дереферирането и копирането на указатели е по-евтино от действителното копиране и достъп до данните, посочени от указателите. Нулев указател е указател, който не сочи към нищо. В Java достъпът до нулев указател ще генерира изключение, наречено NullPointerException.

Какво е масив?

Показан на фигура 1, е част от кода, който обикновено се използва за деклариране и присвояване на стойности на масив. Фигура 2 изобразява как би изглеждал масив в паметта.

int стойности[5];

стойности[0]=100;

стойности[1]=101;

стойности[2]=102;

стойности[3]=103;

стойности[4]=104;

Фигура 1: Код за деклариране и присвояване на стойности на масив

100 101 102 103 104
Индекс: 0 1 2 3 4

Фигура 2: Масив, съхранен в паметта

Кодът по-горе дефинира масив, който може да съхранява 5 цели числа и те са достъпни чрез индекси от 0 до 4. Едно важно свойство на масива е, че целият масив се разпределя като единичен блок памет и всеки елемент получава своето собствено място в масива. След като масивът е дефиниран, размерът му е фиксиран. Така че, ако не сте сигурни за размера на масива по време на компилиране, ще трябва да дефинирате достатъчно голям масив, за да сте в безопасност. Но в повечето случаи всъщност ще използваме по-малко елементи, отколкото сме разпределили. Така че значително количество памет всъщност се губи. От друга страна, ако „достатъчно голям масив“всъщност не е достатъчно голям, програмата ще се срине.

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

Указателят е тип данни, който съхранява адрес на място в паметта, в което се съхраняват някои данни, докато масивите са най-често използваната структура от данни за съхраняване на колекция от елементи. В езика за програмиране C индексирането на масив се извършва с помощта на аритметика на указател (т.е. i-тият елемент от масива x би бил еквивалентен на (x+i)). Следователно в C набор от указатели, които сочат към набор от последователни места в паметта, може да се разглежда като масив. Освен това има разлика в това как операторът sizeof работи с указатели и масиви. Когато се приложи към масив, операторът sizeof ще върне целия размер на масива, докато когато се приложи към указател, ще върне само размера на указателя.

Препоръчано: