将char指针更改为int指针有什么意义

将char指针更改为int指针有什么意义,c,pointers,char,integer,hex,C,Pointers,Char,Integer,Hex,我在以前的c语言考试中有以下代码: int main(int argc, char **argv) { char s[] = "123"; int* a = (int*) s; printf(("%x"),*a); return 0; } 输出为:333231 我的问题是为什么?更改指针如何影响它?您不必声明单独的变量。这样做可以: printf(("%x"),(int*)s); 指针类型指示在取消引

我在以前的c语言考试中有以下代码:

int main(int argc, char **argv) {
    char s[] = "123";
    int* a = (int*) s;
    printf(("%x"),*a);
    return 0;
}
输出为:
333231


我的问题是为什么?更改指针如何影响它?

您不必声明单独的变量。这样做可以:

printf(("%x"),(int*)s);

指针类型指示在取消引用指针时如何解释指针对象。

123由十六进制值
31
(1)
32
(2)
33
(3)表示。通过更改指针类型将其类型转换为
int
,将返回值,而不是字符。在printf语句之前放置一个断点,并查看
s
中存储的字节。您应该看到四个字节,表示每个数字的ascii值,末尾有一个
\0
(null)字节。强制转换会使printf将字节的字符视为整数,而不是四个单独的代码点。@DakotaMethvin谢谢,我现在明白了,但为什么它会打印33 32 31而不是31 32 33?@没有,因为你的电脑很小,但是为什么它会以相反的顺序打印?@没有,因为endianess谢谢,现在很清楚发生了这种情况。