gpt4 book ai didi

C 指针位置,十进制和十六进制

转载 作者:行者123 更新时间:2023-12-02 18:21:51 24 4
gpt4 key购买 nike

我正在尝试学习如何以十进制和十六进制显示指针值。下面您可以看到我创建了一个值并尝试使用指针打印出该值和值的位置。

请使代码正常工作,以便它打印出十进制和十六进制的值

double val= 1;
printf("The value of val : %f\n",val);


double *ptr;
ptr= &val;

printf("dereference *ptr= %f\n", *ptr);

//Display the location of val with and without pointer use in decimal and hex


//decimal
printf("location of val in decimal with ptr is: %p\n",(void *) ptr);
printf("location of val in decimal without a pointer is: %p\n",(void *) &val );

//hexadecimal THIS IS NOT WORKING
printf("location of val in hex with ptr is: %#x\n", (void *) ptr);
printf("location of val in hex without a pointer is: %#x\n", (void *) &val );

最佳答案

%p格式采用 void *并以实现定义的格式打印它。如果您想夺取控制权,请使用 <stdint.h> 中的类型和格式来自 <inttypes.h> (首先在 C99 中定义):

#include <inttypes.h>

printf("Location in decimal: %" PRIuPTR "\n", (uintptr_t)ptr);
printf("Location in hex: 0x%.8" PRIXPTR "\n", (uintptr_t)ptr);
printf("Location in octal %#" PRIoPTR "\n", (uintptr_t)ptr);

等等

uintptr_t type (名义上是可选的,但所有实际实现都应该定义它)是一个无符号整数类型,大到足以容纳指向对象的指针(变量;不一定大到足以容纳函数指针)。名称如 PRIuPTRuintptr_t 定义正确的转换说明符类型(值是特定于平台的)。

请注意,如果您使用 <inttypes.h> ,您不需要包含 <stdint.h> .

关于C 指针位置,十进制和十六进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26050153/

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