[英]Casting a pointer to an int
我寫我自己的功能malloc
和free
的下一項任務。 我需要利用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
嗎?
我收到編譯器錯誤警告:從指針強制轉換為不同大小的整數。
為什么是這樣
因為指針和int
可能具有不同的長度,例如在64位系統上,因此sizeof(void *)
(即指針的長度)通常為8,但sizeof(int)
通常為4。在這種情況下,如果您將a指向int
指針並將其強制返回,您將獲得無效的指針,而不是原始指針。
而且無論如何,我可以將sbrk()指向的地址轉換為int嗎?
如果確實需要將指針轉換為整數,則應將其從<stdint.h>
uintptr_t
為intptr_t
或uintptr_t
。
從<stdint.h>(P)
:
- 能夠容納對象指針的整數類型
下面的類型指定一個帶符號的整數類型,其屬性是可以將指向void的任何有效指針轉換為該類型,然后再轉換回指向void的指針,並且結果將與原始指針進行比較:
intptr_t
以下類型指定了一個無符號整數類型,其屬性是可以將任何有效的指向void的有效指針轉換為該類型,然后再轉換回指向void的指針,其結果將與原始指針進行比較:
uintptr_t
在符合XSI的系統上,需要
intptr_t
和uintptr_t
類型。 否則,它們是可選的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.