Указатель против массива
Указатель - это тип данных, который содержит ссылку на ячейку памяти (т. е. переменная-указатель хранит адрес ячейки памяти, в которой хранятся некоторые данные). Массивы являются наиболее часто используемой структурой данных для хранения набора элементов. Большинство языков программирования предоставляют методы для простого объявления массивов и доступа к элементам массивов.
Что такое указатель?
Указатель - это тип данных, в котором хранится адрес ячейки памяти, в которой хранятся некоторые данные. Другими словами, указатель содержит ссылку на ячейку памяти. Доступ к данным, хранящимся в ячейке памяти, на которую ссылается указатель, называется разыменованием. При выполнении повторяющихся операций, таких как обход деревьев/строк, просмотр таблиц и т. д., использование указателей улучшит производительность. Это связано с тем, что разыменование и копирование указателей дешевле, чем фактическое копирование и доступ к данным, на которые указывают указатели. Нулевой указатель - это указатель, который ни на что не указывает. В Java обращение к нулевому указателю вызовет исключение, называемое NullPointerException.
Что такое массив?
Показанный на рисунке 1 фрагмент кода, обычно используемый для объявления и присвоения значений массиву. На рис. 2 показано, как массив будет выглядеть в памяти.
целые значения[5]; values[0]=100; значения[1]=101; values[2]=102; values[3]=103; values[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 вернет весь размер массива, тогда как при применении к указателю он вернет только размер указателя.