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