Разлика между показалеца и масива

Разлика между показалеца и масива
Разлика между показалеца и масива

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

Видео: Разлика между показалеца и масива
Видео: Раздел, неделя 5 2024, Ноември
Anonim

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

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

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

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

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

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

стойности [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 ще върне целия размер на масива, докато когато се приложи към указател, ще върне само размера на указателя.

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