C语言 如何在没有指针的情况下存储变量的地址



如何在不使用指针的情况下存储变量的地址?

#include<stdio.h>
int main ()
{
double sum;
double x= &sum;
printf("n %lf",x);
}

你做得几乎是对的。但是您将其存储在double中,变量的内存地址可以是 4 个字节或 8 个字节,具体取决于实现。不过,您应该始终转换为更广泛的类型。目前,将其存储在double中可能会导致信息丢失。

您需要使用足够宽的数据类型。您可以使用unsigned long long,但是为了跨平台兼容性,我建议改用stdint.h中的uint64_t。还有随之而来的inttypes.h.

#include<stdio.h>
#include<stdint.h>
#include<inttypes.h>
int main()
{
double sum;
uint64_t x = (uint64_t) &sum;
printf("%" PRIx64 "n", x);
}

这可确保使用无符号的 64 位(8 字节(变量,以免丢失信息。

此外,使用PRIx64格式说明符进行打印,以获取 64 位十六进制形式的输出。

但是请注意,这仅适用于打印地址,并且仅适用于地址。这确实没有任何实际目的。

根据定义,指针是存储另一个地址的对象。 如何在不使用适当的存储变量的情况下存储某些内容?没有其他对象来存储地址,那么你有什么建议?

如果您只想打印要stdout的地址,只需执行以下操作:

printf("%pn", &sum);

格式说明符%p允许您传递指针,并且可以直接使用&sum传递sum地址的值。

相关内容

最新更新