Вывод Объяснение этой программы на C?

У меня есть эта программа на C:

int main(int argc, char *argv[])
{

  int i=300;
  char *ptr = &i;
  *++ptr=2;
  printf("%d",i);
  return 0;
}

Вывод 556 с прямым порядком байтов.

Я попытался понять вывод. Вот мое объяснение.

Вопрос: останется ли ответ таким же в машине с обратным порядком байтов?

i = 300; => i = 100101100 //в двоичном виде в формате слова => BB Hb 0001 00101100, где B = байт и Hb = полубайт

(A)=> в памяти (при условии, что это прямой порядок байтов))

0x12345678 - 1100 - 0010 ( Is this correct for little endian)

0x12345679 - 0001 - 0000

0x1234567a - 0000 - 0000

0x1234567b - 0000 - 0000

0x1234567c - Местоположение следующего intezer (расположение ptr++ или ptr + 1, где ptr — указатель на intezer, поскольку ptr имеет тип int => при выполнении ++ptr он будет увеличиваться на 4 байта (размер int))

когда

(B)мы делаем char *ptr = &i; ptr станет типа char => при выполнении ++ptr он будет увеличиваться на 1 байт (размер char) поэтому при выполнении ++ptr он перейдет к местоположению -> 0x12345679 (который имеет 0001 - 0000) сейчас мы делаем ++ptr = 2 => 0x12345679 будет перезаписан на 2 => 0x12345679 будет иметь 00*10** - 0000 вместо 000* 1* - 0000

, поэтому новое содержимое памяти будет выглядеть так:

(C)

0x12345678 - 1100 - 0010

0x12345679 - 0010 - 0000

0x1234567a - 0000 - 0000

0x1234567b - 0000 - 0000

что эквивалентно => BB Hb 0010 00101100, где B = байт и Hb = полубайт

Верны ли мои рассуждения? Есть ли для этого какой-либо другой короткий метод? С уважением, Софти

6
задан Paul R 6 June 2012 в 06:57
поделиться