gpt4 book ai didi

c - %p 到底是什么?为什么它与使用 %d 打印指针的 int 值不同?

转载 作者:行者123 更新时间:2023-11-30 21:00:27 27 4
gpt4 key购买 nike

#include <stdio.h>

int main()
{
int *ptr;
int a=2;
ptr=&a;
printf("%p\n",ptr);
printf("%d\n",ptr);
printf("%p\n",a);
return 0;
}

我得到的输出是:

% ./a.out
0x7ffe12032c40
302197824
0x2
%

前两个输出的值发生变化(显然是由于 ASLR),而 0x2 保持不变。

最佳答案

指针的大小不等于 int 的大小,因此不能使用 %d 代替 %p,%p 用于打印指针变量中存储的值,同时将 %p 与 int 变量一起使用是未定义的行为(如果您使用的系统上的指针和 int 具有相同的大小,您可能会看到正确的结果,但作为 C 标准,它是未定义的行为)

int的sizeof是由编译器定义的,不同的编译器在单台机器上可能有不同的int大小,但是指针的大小是由机器类型定义的(8,16,32,64位)

关于c - %p 到底是什么?为什么它与使用 %d 打印指针的 int 值不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41235656/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com