【问题标题】:What is the meaning of changing char pointer to int pointerchar指针改成int指针是什么意思
【发布时间】: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


【解决方案1】:

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

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

指针类型决定了指针被取消引用时如何解释指针。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2011-01-27
  • 2012-11-02
  • 1970-01-01
  • 1970-01-01
  • 2013-07-08
  • 2014-06-25
  • 2011-02-04
  • 2023-03-03
相关资源
最近更新 更多