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

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

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

Видео: Разница между указателем и массивом
Видео: Топ вопросы на собеседовании по Алгоритмам: 2) Массив и список - что лучше? 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 вернет весь размер массива, тогда как при применении к указателю он вернет только размер указателя.

Рекомендуем: