Рубрики

В чем разница между «массивом» и «& массивом» для «массива int [5]»?

Если кто-то определил массив, такой как « int array [5] », что означает « массив » или « & массив »? Они оба одинаковые или разные? Может возникнуть соблазн думать, что они оба будут указывать на самый первый элемент массива, т.е. они оба будут иметь один и тот же адрес. Позвольте нам узнать!

Чтобы проверить это, самое первое, что приходит на ум, — это следующая программа.

#include "stdio.h"

int main()

{

   int array[5];

  

   / * Если% p для вас новичок, вы также можете использовать% d * /

   printf("array=%p : &array=%p\n", array, &array);

  

   return 0;

}

Таким образом, вы получили один и тот же адрес для « массива » и « & массива ». Опять же, вы склонны думать, что оба одинаковы. Ну, это не так! Как получается, что переменная и ее & (т.е. адрес) одинаковы. Это не выглядит логичным, но мы увидели, что и « массив », и « & массив » печатают один и тот же адрес. Может быть, это слишком рано, чтобы прийти к выводу. Суть этого поста в том, что, несмотря на то, что оба они приводят к одному и тому же адресу, это разные типы адресов . И это разница между « массивом » и « & массивом ».

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

#include "stdio.h"

int main()

{

   int array[5];

  

   / * Если% p для вас новичок, вы также можете использовать% d * /

   printf("array=%p : &array=%p\n", array, &array); 

  

   printf("array+1 = %p : &array + 1 = %p", array+1, &array+1);

  

   return 0;

}

С помощью арифметики с указателями мы знаем, что происходит, когда мы добавляем к указателю целое число. Так можете ли вы угадать вывод вышеуказанной программы, не запуская ее? Не следует указывать « массив + 1 » и « & массив + 1 » на один и тот же адрес. Ну, вы можете быть удивлены 🙂

По сути, « массив » — это « указатель на первый элемент массива », а « & массив » — это « указатель на весь массив из 5 int ». Поскольку « массив » является указателем на int , добавление 1 привело к получению адреса с шагом 4 (при условии, что размер int на вашем компьютере равен 4 байта). Поскольку « & массив » — это указатель на массив из 5-ти дюймов, добавление 1 привело к получению адреса с шагом 4 x 5 = 20 = 0x14. Теперь вы понимаете, почему эти два, казалось бы, похожих указателя отличаются на уровне ядра. Эта логика может быть распространена и на многомерные массивы. Предположим, что double twoDarray [5] [4] является двумерным массивом. Здесь «twoDarray» — указатель на массив из 4 int, а «&DarDarray» — указатель на массив из 5 строк, массив из 4 int ». Если это звучит загадочно, у вас всегда может быть небольшая программа, чтобы распечатать их после добавления 1. Мы надеемся, что мы могли бы уточнить, что любое имя массива само по себе является указателем на первый элемент, но & (то есть address-of) для имени массива указатель на весь массив .

Пожалуйста, сделайте Like / Tweet / G + 1, если вы найдете вышеупомянутое полезным. Кроме того, пожалуйста, оставьте нам комментарий для дальнейшего разъяснения или информации. Мы будем рады помочь и научиться 🙂

Рекомендуемые посты:

В чем разница между «массивом» и «& массивом» для «массива int [5]»?

0.00 (0%) 0 votes