[英]Void Pointer Cast Error?
我在我的C程序中使用空指針。 我有一個if語句,它強制將數據集打印到32字節邊界。
**我應該注意,我正在嘗試修改mem指針的地址以將其移至邊界**
我收到以下錯誤消息:
Operation between types "void*" and "int" is not allowed
我的代碼如下:
if(((int)mem % 32) != 0)
mem -= ((int)mem % 32);
其中mem定義為:
void *mem
像這樣:
void * mem; // input
char * p = mem; // byte-wise arithmetic
uintptr_t n = (uintptr_t) p; // integral arithmetic
p -= n % 32 // align
mem = p; // output
請注意,這個假設地址之前內存mem
到已經分配點,也是你的。
您當然可以將代碼壓縮為單個語句:
mem = (char *) mem - ((uintptr_t) mem % 32);
注意指針轉換通常是實現定義的。 沒有標准的方法可以推斷“對齊”,並且從指針獲得的整數值可能與硬件中的內存布局無關,也可能無關。
您不能使用void *
來執行指針算術:
mem -= ((int)mem % 32);
未定義,因為*mem
沒有“內在大小”。
可能會有編譯器(您好, gcc
!)允許它作為擴展,但是通常,您只能對具有大小的類型的指針(例如char *
, int *
等)進行指針算術。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.