2012-07-15 50 views

回答

6

簡單的例子:把內存爲unsigned char類型的數組

void *memory = malloc(1000); //allocate a pool of memory 
uint8_t *ptr = memory+10; 
*ptr = 1 //set an integer value at byte 10 
uint8_t i = *ptr; //read an integer value from the 10th byte 

您可以使用整數太大,但你一定要注意你在一次設置的字節數量。

+0

是否有可能通過投射void指針而不是創建「中間」類型指針來實現此目的? – dtech 2012-07-15 10:07:26

+0

當然,爲清晰起見,我使用中間表示法 – ziu 2012-07-15 10:08:34

3

因此,通過「工作」我假設你的意思是「我怎麼提領/上void*執行指針運算」?你不能;如果你只關心閱讀大量的內存,你必須將它施放到char*。當然,如果是這種情況,只需將其聲明爲char*即可。

+0

我對讀/寫任何類型的東西感興趣,不僅僅是字符。 – dtech 2012-07-15 10:01:19

+0

@ddriver:沒有改變。你必須投射指針。當類型未知時,你會如何期待解引用和/或算術的行爲?這個不成立。您需要傳遞額外信息以瞭解底層類型。 – 2012-07-15 18:12:20

4

規則很簡單:

  • 每個指針類型(除函數指針)可被轉換爲並從無效*,無損耗。
  • 您無法對void *指針執行指針運算,也無法對它們進行解引用
  • sizeof(char)等於1,按照定義;所以增加一個字符指針意味着將「原始」指針值「加1」

由此可以得出結論,如果要執行「原始」