2016-09-27 3 views
-1

Вот две инструкции:Почему эти две инструкции различаются по размеру?

int p = 0; 
int size_1 = (int*)(&p+1)-(int*)&p; 
int size_2 = (char*)(&p+1)-(char*)&p; 

Я обнаружил, что size_1 является 1 и size_2 является 4. Мне было интересно, почему они меняются таким образом.

+0

Расстояние между началом и концом int равно 1 int или 4 символа (в вашей системе) –

+0

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

+0

Разделите 'size_2' на' sizeof (int) ', и результат будет равен' size_1'. – Peter

ответ

2

Основная причина в том, что int - это 4 байта в вашей системе, а char - 1 байт. Код (&p+1) вернет указатель на адрес памяти 4 байта (sizeof(int)) после p. Затем, когда вы назначаете size_1 вы просите ваш ответ с точкой зрения на int размерах, таким образом, вы получаете 1. Для size_2, вы спрашиваете разницу между адресом в char размерах, что дает 4.

3

Это основное указатель арифметики. Немного уменьшив, вычитая два значения int*, вы получите число int s, соответствующее двум указателям (одно), в то время как вычитание двух char* приводит к количеству char s, которые соответствуют между указателями (в вашей системе это бывает четыре, потому что int имеет ширину в четыре байта).

Смежные вопросы