为什么指针没有给出其Ascii值?

时间:2019-02-12 01:02:05

标签: c pointers

这是我当前的以下代码:

#include<stdio.h>
int main() {
  /* code */
  char a[5] = {'a','b'};
  int *p =a;
  printf("%d\n", *p);
return 0;
}

执行代码时,它显示25185而不是给我一个ASCII值。

为什么会这样?

谢谢

3 个答案:

答案 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