如果孤独感 发表于 2020-3-25 15:23:20

为什么%d是乱码%p却可以;

#include <stdio.h>

int main()
{
      int a, b;

      b = 100;
      a = &b;

      printf("%d\n", a);

      return 0;
}

ba21 发表于 2020-3-25 15:30:25

%p 是显示变量所在的内存地址。
%p 肯定不会乱码,什么数据都有地址。

qiuyouzhi 发表于 2020-3-25 15:31:44

因为你不用指针指向一个整数的地址,还用%d输出,肯定是乱码
但你用%p就不一样,每个数据都有地址的

一个账号 发表于 2020-3-25 15:35:26

%p 是输出地址的,%d 是输出整形的。

用 %d 输出 地址当然不行

sunrise085 发表于 2020-3-25 15:36:14

本帖最后由 sunrise085 于 2020-3-25 15:41 编辑

地址本来就很长啊。
你将变量b的地址赋值给a,然后用int输出。
为什么你称之为乱码?难道输出不是数字?
int类型在不同的系统上长度可能不一样。
你可以同时输出%d 和%p看看是不是一样。
地址过高的话,int会输出负数哟。
#include <stdio.h>
int main()
{
    int a, b;
    b = 100;
    a = &b;
    printf("%p\n", a);
    printf("%d\n", a);
    return 0;
}

结果如下:
0x3c44e9b8
1011149240
这俩数是一样的。你可以将16进制的数转为10进制看看

如果孤独感 发表于 2020-3-25 16:13:18

sunrise085 发表于 2020-3-25 15:36
地址本来就很长啊。
你将变量b的地址赋值给a,然后用int输出。
为什么你称之为乱码?难道输出不是数字?
...

好吧……
页: [1]
查看完整版本: 为什么%d是乱码%p却可以;