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

Указатель против массива

Указатель - это тип данных, который содержит ссылку на ячейку памяти (то есть переменная указателя хранит адрес ячейки памяти, в которой хранятся некоторые данные). Массивы - это наиболее часто используемая структура данных для хранения коллекции элементов. Большинство языков программирования предоставляют методы для простого объявления массивов и доступа к элементам в массивах..

Что такое указатель?

Указатель - это тип данных, в котором хранится адрес ячейки памяти, в которой хранятся некоторые данные. Другими словами, указатель содержит ссылку на ячейку памяти. Доступ к данным, хранящимся в ячейке памяти, на которую ссылается указатель, называется разыменованием. При выполнении повторяющихся операций, таких как обход деревьев / строк, поиск таблиц и т. Д., Использование указателей повысит производительность. Это связано с тем, что разыменование и копирование указателей обходится дешевле, чем фактическое копирование и доступ к данным, указанным указателями. Нулевой указатель - это указатель, который ни на что не указывает. В 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 будет возвращать весь размер массива, тогда как при применении к указателю он будет возвращать только размер указателя.