Строка - это массив символов, заканчивающийся символом NUL. Данные здесь:
"5"
Это то же самое, что и
{'5','\0'}
Когда вы присваиваете значение массива чему-то в C, вы назначаете указатель на первый элемент в массиве. Поэтому, когда вы пишете:
char w = "5"
вы создаете символ и присваиваете его значение ячейке памяти первого элемента в массиве символов, символ недостаточно велик для хранения ячейки памяти.
Делаем это:
printf("size of x %x\n",&w);
Распечатывает расположение w в памяти
Делаем это:
printf("size of X %X\n", w);
печатает значение w, в вашем случае был назначен адрес массива строк и обрезан, потому что char не может соответствовать адресу.
Если вы хотите использовать строку, вы должны сделать это:
const char * w = "5"
Затем вы можете распечатать строку следующим образом:
printf("string: %s\r\n", w);
вы можете распечатать первый символ в массиве одним из следующих способов
printf("char: %c\r\n", *w);
printf("char: %c\r\n", w[0]);
Для второго бита, когда вы назначаете w следующим образом:
char w = '5';
печать &w
печать местоположения в памяти.
печать w
с %x
печатает значение ASCII '5'
, которое составляет 0x35