Как вывод программы C ниже 556?Пожалуйста, объясните char * b = (char *) & a; - PullRequest
0 голосов
/ 23 февраля 2019
#include <stdio.h>

int main() {
    int a = 300;
    char *b = (char *)&a;
    b++;
    *b = 2;
    printf("%d", a);
    return 0;
}
  • C Проблема программирования
  • Внутренняя память работает

1 Ответ

0 голосов
/ 23 февраля 2019

в

char *b=(char *)&a;

вы получаете адрес a в качестве указателя на символ

b++;*b=2;

установите следующий символ на 2, этот символвнутри a , и эффект зависит от порядка байтов в вашем int , а также от размера int , конечно

printf("%d",a);

Для меня результат также равен 556, потому что начальное значение 300 равно 0x012C, поэтому байты 0x2C 0x01 0x00 0x00 в памяти, если int на 32b, при изменении второго байта на 2 значение изменяется на0x2C 0x02 0x00 0x00 так 0x22c так 556.

В случае, если байты расположены в обратном порядке, начальное значение 300 - это байты 0x00 0x00 0x01 0x2C в памяти (все еще в 32b), при изменении второго байта на 2значение изменяется на 0x00 0x02 0x01 0x2C, поэтому 0x2012c, так 131372

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...