我有个变数

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 */

关于c - 类型转换指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13912248/

10-09 09:03