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

Автор: Laura McKinney
Дата создания: 1 Апрель 2021
Дата обновления: 15 Май 2024
Anonim
Арифметика указателей.  Указатели и массивы. Массив это указатель.  C++ для начинающих. Урок #47
Видео: Арифметика указателей. Указатели и массивы. Массив это указатель. C++ для начинающих. Урок #47

Содержание


Существует тесная связь между массивом и указателем. Указатель может быть использован для доступа к элементам массива, доступ ко всему массиву с помощью арифметики указателей, ускоряет доступ. Существует принципиальное различие между указателем и массивом: массив - это набор переменных схожего типа данных, тогда как указатель - это переменная, в которой хранится адрес другой переменной. Есть некоторые другие различия между массивом и указателем, которые обсуждаются ниже в сравнительной таблице.

  1. Сравнительная таблица
  2. Определение
  3. Ключевые отличия
  4. Вывод

Сравнительная таблица

Основа для сравнениямассивУказатель
декларация// в C ++
тип var_name;
// В Java.
введите var-name;
var_name = новый тип;
// в C ++
тип * var_name;
За работойХранит значение переменной однородного типа данных.Сохраните адрес другой переменной того же типа данных, что и тип указателя переменных.
поколениеМассив указателей может быть сгенерирован.Указатель на массив может быть сгенерирован.
Поддержка JavaПоддержка концепции массива.Не поддерживает указатели.
Место храненияВ обычном массиве хранятся значения переменных, а в массиве указателей хранятся адреса переменных.Указатели специально предназначены для хранения адресов переменных.
ВместимостьМассив может хранить количество элементов, указанных в размере переменной массива. Переменная-указатель может хранить адрес только одной переменной за раз.


Определение массива

Массив - это набор элементов одного и того же типа данных, и все эти элементы обозначаются общим именем, которое является именем переменной массива. Доступ к конкретному элементу массива можно получить, обратившись к определенному индексу этого массива, в котором хранится этот элемент. Массивы могут быть одномерным массивом, двумерным массивом или многомерным массивом. Массив указателей также может быть сгенерирован, то есть массив, содержащий всю переменную в качестве переменной указателя. В «C ++» массивы размещаются статически, тогда как в «Java» массивы распределяются динамически.

// В C ++ тип var_name; // В Java. введите var-name; var_name = новый тип;

Здесь «тип» обозначает тип данных переменной массива, «var_name» обозначает имя, данное переменной массива, «размер» обозначает емкость переменной массива, т.е. сколько элементов «типа» может храниться в этой переменной массива , Существует два метода доступа к массиву: первый «арифметика указателей» и второй «индексирование массивов», из которых «арифметика указателей» быстрее.


// доступ с использованием арифметики с указателем Void display_array (int * S) {while (* s) {cout (<< "value is" << * s); * С ++; }}

Использование «арифметики указателей» будет работать быстрее по сравнению с «индексированием массивов», то есть доступ к переменной массива с помощью ее индекса. Если вам нужно передать массив указателей в функцию, это можно сделать с помощью того же метода, который вы использовали для передачи обычного массива, то есть напрямую вызвать функцию с именем массива без какого-либо индекса.

Давайте разберемся с примером

// Объявление массива указателей. int * p;

Здесь показано, что p - это массив целочисленного типа, он будет содержать адрес переменной 10 целочисленного типа. Давайте передадим вышеуказанный массив указателей в функцию display ().

дисплей (р); // Вызов функции отображения. void display (int * d) {// Функция, получающая массив указателей. for (int i = 0; i <10; i ++) {cout << ("index" <

Эта функция будет отображать значения, присутствующие в переменных, адреса которых хранятся в этом массиве указателей последовательно.

Определение указателя

Указатель является переменной, которая содержит адрес памяти другой переменной. Тип данных обоих, переменная указателя и переменная, адрес которой назначается переменной указателя, должен быть одинаковым. Переменная-указатель объявлена ​​следующим образом.

// Объявление в C ++ type * name;

Здесь «тип» - это тип данных, «имя» - это имя переменной указателя. Тип определяет, какой тип переменной может храниться в переменной указателя. Например, целочисленный указатель будет хранить адрес целочисленной переменной. Есть два оператора указателя ‘*’ и ‘&’. Оператор ‘*’ возвращает значение, расположенное по адресу, который хранится в переменной с последующим знаком sign * ’. Оператор «&» возвращает адрес переменной, за которой следует знак «&».

// например int b = 10 int a = & b; // Здесь адрес b хранится в переменной a. // допустим, что адрес b равен 2000, поэтому теперь a = 2000. int c = * a; // Здесь переменная целочисленного указателя * a вернет значение, которое находится по адресу, хранящемуся в .ie. с = 10.

В указателях можно использовать только два арифметических оператора, то есть сложение и вычитание. Если вы примените инкремент к переменной целочисленного указателя, он будет увеличен на размер типа данных, то есть на 2 байта, поскольку это целочисленный указатель, при инкременте он должен будет указывать следующую целочисленную переменную. То же самое и в случае с декрементом.

// p - целочисленный указатель, содержащий значение 2000. p ++; // теперь р = 2002. п--; // теперь p снова содержит 2000 как уменьшено на два байта.

  1. В массиве хранятся переменные схожих типов данных, а типы данных переменных должны соответствовать типу массива. С другой стороны, переменная-указатель хранит адрес переменной типа, подобного типу типа переменной-указателя.
  2. Мы можем сгенерировать массив указателей, то есть массив, переменные которого являются переменными указателя. С другой стороны, мы можем создать указатель, который указывает на массив.
  3. Java поддерживает массив, но не поддерживает указатели.
  4. Размер массива определяет количество переменных, которые он может хранить, тогда как; переменная-указатель может хранить адрес только переменной

Заметка:

Java не поддерживает или строго избегает указателей.

Вывод:

Когда нам нужно работать с элементами данных схожего типа данных, тогда вместо того, чтобы работать отдельно с переменными, мы можем создать массив этих переменных схожих типов данных и затем работать с ним. Указатели необходимы для некоторой программы, это дает огромные возможности, но, к сожалению, если указатель содержит неверное значение, это будет самая трудная ошибка для поиска.