这是我当前的以下代码:
#include<stdio.h>
int main() {
/* code */
char a[5] = {'a','b'};
int *p =a;
printf("%d\n", *p);
return 0;
}
执行代码时,它显示25185
而不是给我一个ASCII值。
为什么会这样?
谢谢
答案 0 :(得分:7)
这是未定义的行为,因此任何事情都可能发生。至于您要特别观察的内容,请按以下说明进行操作:
如果数组仅在声明时初始化了其某些值,则其余值为零。因此,您的数组a
是'a', 'b', '\0', '\0', '\0'
。如果将指向此数组开头的指针解释为32位小尾数int
,则其值为0x00006261或十进制的25185。
答案 1 :(得分:4)
(免责声明:other answer向您展示了获得25185
的原因,这表明了您如何实现自己的目标。)
如果您要输出ASCII值a[0]
(似乎是int *p=a;
所要执行的操作),请告诉printf()
您要传递 byte
,并使用 char*
(指向字符的指针,该字符在C中为字节)指向
int main (int arg, char **argv)
{
char a[5] = {'a','b'};
char *p =a; // points to a char, ie a byte
printf("%hhx\n", *p); // tells to printf it's a byte type
return 0;
}
答案 2 :(得分:2)
使用a[5]
初始化{'a', 'b'}
会将值赋予2
字节
ascii binary
a 97 0110 0001
b 98 0110 0010
因此,当您通过整数指针读取它时,它会读取0110 0001 0110 0010 = 25185
(以十进制表示),并且在小字节序之后的高2
字节中包含0
如果通过char指针读取,它将读取一个字节0110 0001 = 97