簡體   English   中英

使用calloc在C中創建位圖

[英]using calloc to create bitmap in C

如果我將int數組用作位圖,則分配的大小將為(1 << 28)/ 32,對嗎? 因為int是32位...? 而且,如果我想在調用任何函數之前調用該空間,是否需要做一些特別的事情? 編輯

我正在嘗試使用calloc擁有一個位數組,在這里我可以檢查並在該數組位置設置位。

我的嘗試:

    int bitmap[] = calloc(1<<28, 1);

    int bitmap[] = (int*) calloc(1<<28, 1);

我不確定位圖是什么類型或將calloc強制轉換為...

任何幫助,將不勝感激!

您不能直接在C語言中使用“位數組”。您需要使用掩碼/位移位運算符以較大單位(至少8位char )訪問單個位。

另外,您嘗試使用的正確語法是:

int *bitmap = calloc(1<<28, sizeof(int));

這將分配(1 << 28) int s的數組。

像這樣訪問它們:

int i;
for (i = 0; i < (1<<28); ++i) {
    bitmap[i] = ...
}

首先,最好將位圖的基礎類型定義為unsigned int而不是signed int。

當您使用返回指針的函數calloc時,已定義對象的類型也應為指針。

unsigned int *bitmap = calloc( 1u << 28, sizeof( unsigned int ) );

雖然我懷疑1u << 28的第一個值確實是您真正需要的。

暫無
暫無

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

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