gpt4 book ai didi

c - c中可以存在多少种指针值组合?

转载 作者:太空宇宙 更新时间:2023-11-04 02:29:53 27 4
gpt4 key购买 nike

我有一个 C 程序执行以下两个操作:

struct element *e = (struct element*) malloc(sizeof(struct element));
long unsigned addr = (long unsigned) e;

据此,addr 有指针的十进制值。我可以将 addr 转换回元素指针并使用它从内存中获取元素。

我想知道 addr 有多少个可能的值。我知道 long unsigned 的最大值大约是 43 亿,但是我真的可以让 addr 的值为 1 吗?我可以获得某个范围内的数字吗?如果有的话,这个范围取决于什么?

最佳答案

一些地址是为操作系统 (OS) 保留的,通常位于低内存地址。然而,你不应该对你的数据的地址* 感兴趣,因为它们是由操作系统决定的,因此依赖于操作系统,而且很大程度上依赖于操作系统的当前状态(一个执行了很多程序的操作系统与执行了少量程序的操作系统的行为会有所不同,并且在这两种情况下为您的程序提供不同的地址。

阅读更多 C : Memory layout of C program execution .


使用 intptr_t ( <stdint.h> ) 作为地址,正如 BLUEPIXY 所说 ( more )。


I have a C program that does struct element *e = (struct element*) malloc(sizeof(struct element));

Do I cast the result of malloc?不!


*除非您正在编写没有操作系统的操作系统代码或嵌入式代码,否则您可能对数据可能具有的地址非常感兴趣,如 Carey Gregory 所说,或其他特殊情况。

关于c - c中可以存在多少种指针值组合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44865913/

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