C 打字指针
我有一个变量C 打字指针,c,typecasting-operator,C,Typecasting Operator,我有一个变量 UInt32 PageAddr = 0x80000000; UInt8 Blank_Check(const UInt8 *Address) 和一个函数 UInt32 PageAddr = 0x80000000; UInt8 Blank_Check(const UInt8 *Address) 我正在调用函数after typecasting变量 Blank_Check((UInt8 *)&PageAddr); < >将传递给空白检查的值< /强>。我试图分析,但无法
UInt32 PageAddr = 0x80000000;
UInt8 Blank_Check(const UInt8 *Address)
和一个函数
UInt32 PageAddr = 0x80000000;
UInt8 Blank_Check(const UInt8 *Address)
我正在调用函数after typecasting变量
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,其中引用了一个值,在这种情况下,你对引用做了什么,或者引用了什么。实际上是对原始变量执行的。运算符的地址
,
在函数调用中使用时,将采用变量PageAddr
的地址,即不是其值0x8000000
。您可能希望将其称为空白检查((const UInt8*)PageAddr)代码>是,如@anishsane所说。否,将传递指向0x8000000存储位置的指针(=地址)。
Blank_Check((UInt8 *)&PageAddr);