将指针强制转换为int

use*_*401 2 c heap malloc pointers sbrk

我正在编写自己的函数,mallocfree在C中编写作业.我需要利用C sbrk()包装器功能.根据我的理解sbrk(),程序的数据空间增加了作为参数传递的字节数,并指向程序中断的位置.

如果我有以下代码段:

#define BLOCK_SIZE 20

int x;

x = (int)sbrk(BLOCK_SIZE + 4);

我得到编译器错误warning: cast from pointer to integer of different size.为什么这样,无论如何我可以将指向的地址sbrk()转换为int

Lee*_*hem 7

我收到编译器错误警告:从指针强制转换为不同大小的整数.
为什么是这样

因为指针和int可能有不同的长度,例如,在64位系统上,sizeof(void *)(即指针的长度)通常是8,但sizeof(int)通常是4.在这种情况下,如果你将一个指针转换为一个int并将其投回,你将获取无效指针而不是原始指针.

无论如何我可以将sbrk()指向的地址转换为int吗?

如果你真的需要转换一个指向整数的指针,你应该将它转换为intptr_tor uintptr_t,from <stdint.h>.


来自<stdint.h>(P):

  • 能够保存对象指针的整数类型

以下类型指定一个带符号的整数类型,其属性是任何有效的void指针都可以转换为此类型,然后转换回指向void的指针,结果将比较原始指针: intptr_t

以下类型指定一个无符号整数类型,其属性是任何有效的void指针都可以转换为此类型,然后转换回指向void的指针,结果将等于原始指针: uintptr_t

在符合XSI的系统上,需要intptr_tuintptr_t类型; 否则,它们是可选的.