Путаница в обращении к памяти с массивами - PullRequest
1 голос
/ 09 января 2012

Позволяет иметь массив типа int: -

        int arr[5]; 

Теперь

       if arr[0] is at address 100 then
       Why do we have;
       arr[1] at address 102 , 
       arr[2] at address 104 and so on. 

Вместо

       arr[1] at address 101 , 
       arr[2] at address 102 and so on. 

Это потому, что целое число занимает 2 байта?

Имеет ли каждый блок памяти емкость 1 байт (32-разрядный процессор или 64-разрядный)?

Ответы [ 3 ]

3 голосов
/ 09 января 2012

Ваш первый пример соответствует 16-битному ints.

Что касается вашего второго примера (&arr[0]==100, &arr[1]==101, &arr[2]==103), это не может быть допустимым макетомпоскольку расстояние между последовательными элементами варьируется между первой парой и второй.

3 голосов
/ 09 января 2012

Это потому, что целое число занимает 2 байта?

Да

Очевидно, в вашей системе int имеет размер 2. В других системах это может быть не так. Обычно int имеет размер 4 или 8 байт, но возможны и другие размеры.

0 голосов
/ 09 января 2012

Вы правы, на вашей машине размер int равен 2, поэтому следующее возможное значение в массиве будет на расстоянии 2 байта от предыдущего.

-------------------------------
|100|101|102|103|104|105|106....
-------------------------------
arr[0]  arr[1]  arr[2]

Нет гарантии относительно размера int. Спецификация C ++ просто говорит, что sizeof (int)> = sizeof (char). Это зависит от процессора, компилятора и т. Д.

Для получения дополнительной информации попробуйте

...