簡體   English   中英

將指針轉換為int

[英]Casting a pointer to an int

我寫我自己的功能mallocfree的下一項任務。 我需要利用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_tintptr_tuintptr_t


<stdint.h>(P)

  • 能夠容納對象指針的整數類型

下面的類型指定一個帶符號的整數類型,其屬性是可以將指向void的任何有效指針轉換為該類型,然后再轉換回指向void的指針,並且結果將與原始指針進行比較: intptr_t

以下類型指定了一個無符號整數類型,其屬性是可以將任何有效的指向void的有效指針轉換為該類型,然后再轉換回指向void的指針,其結果將與原始指針進行比較: uintptr_t

在符合XSI的系統上,需要intptr_tuintptr_t類型。 否則,它們是可選的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM