簡體   English   中英

C中的指針類型鑄造

[英]Type Casting of pointers in C

我正在學習 void 指針中的類型轉換和 *((typecasting) void_pointer) 的一部分,我並沒有不明白為什么需要這個 *( 在真正的類型轉換之前。

有人可以解釋一下這部分代碼:

printf("[int pointer] points to %p, which contains the int %d\n", void_pointer, *((int *) void_pointer));

這部分做什么*((int *) void_pointer))

(對不起我的英語)

我假設void_pointervoid *類型。 void 指針可以指向任何類型,您不能直接取消引用它們。 所以讓我們分解*((int *) void_pointer 。首先,它被轉換為一個int指針(這就是(int *) void_pointer的)。然后,指針被取消引用以獲取它指向的值。你可以重寫為:

int *int_pointer = (int *) void_pointer;
int int_value = *int_pointer;

您的void指針簡單地說包含某物的原始地址,但它不知道某物代表哪種數據類型。 這就是為什么你不能取消引用它,因為結果實體的大小和類型是未知的。 要經歷這樣的限制,您必須將void指針轉換為非void指針(在您的情況下,它是int*在大多數系統上是 4 個字節長),然后您可以輕松地取消引用它並對其進行算術運算而不會發出警告由編譯器生成。

暫無
暫無

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

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