簡體   English   中英

類型指針

[英]Typecasting pointers

我有一個變量

UInt32 PageAddr = 0x80000000;

和一個功能

UInt8 Blank_Check(const UInt8 *Address)

我在類型轉換變量后調用該函數

Blank_Check((UInt8 *)&PageAddr);

會有什么將被傳遞到空白支票的價值 我試圖分析,但我無法理解它是如何工作的?

簡短版本:刪除&字符。

更長的版本:

它將是完全相同的指針值。 該類型僅用於幫助C編譯器知道如何索引和取消引用指針。

為了澄清值和指針之間的區別,請嘗試:

UInt32 PageAddr = 0x80000000;
printf("%d,   %p\n", PageAddr, &PageAddr);

通過變量的名稱,我猜你真的想做一些像:

Uint32* PageAddr = 0x80000000;   /* as a pointer */

Blank_Check((UInt8 *)PageAddr);  /* cast pointer to another kind of pointer */

或者,如果您希望將指針保持為整數(幾乎適用於所有平台,但不是100%可移植),如下所示:

Uint32 PageAddr = 0x80000000;   /* as an integer */

Blank_Check((UInt8 *)PageAddr); /* cast integer to pointer */

傳遞的值是編譯器將變量PageAddr放入內存的地址。 這是傳遞的價值

實際上,C是一種僅按值傳遞的語言。 當您傳遞變量時,將傳遞變量的值。 當你傳遞一個指針,喜歡&PageAddr的地址PageAddr成為傳遞價值。

之后,在被調用函數中,您可以使用地址值來查看或更改存儲在該地址中的內容。

這與允許通過引用傳遞的語言形成對比,例如C ++或Java,其中傳遞對值的引用,在這種情況下,您對引用執行的任何操作實際上都是對原始變量執行的。

暫無
暫無

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

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