【发布时间】:2021-04-21 14:09:39
【问题描述】:
我在以前的 c 考试中有以下代码:
int main(int argc, char **argv) {
char s[] = "123";
int* a = (int*) s;
printf(("%x"),*a);
return 0;
}
输出为:333231
我的问题是为什么?改变指针效果如何?
【问题讨论】:
-
ASCII characters
123由十六进制值31(1)32(2)33(3) 表示。通过更改指针类型将它们的类型转换为int返回值,而不是字符。 -
在 printf 语句前放一个断点,查看存储在
s中的字节。您应该看到四个字节,代表每个数字的 ascii 值,末尾有一个\0(空)字节。强制转换导致 printf 将字节视为整数,而不是四个单独的代码点。 -
@DakotaMethvin 谢谢,我现在明白了,但为什么打印的是 33 32 31 而不是 31 32 33 ?
-
@none 因为你的电脑是 little-endian
标签: c pointers char integer hex