1

我有一个变量

UInt32 PageAddr = 0x80000000;

和一个函数

UInt8 Blank_Check(const UInt8 *Address)

我在类型转换变量后调用该函数。

Blank_Check((UInt8 *)&PageAddr);

将传递给空白支票的是多少。我试图分析,但我无法理解它是如何工作的?

4

2 回答 2

2

短版:删除&字符。

更长的版本:

它将是完全相同的指针值。该类型只是为了帮助 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 */
于 2012-12-17T10:23:31.370 回答
1

传递的值是PageAddr编译器将变量放入内存的地址。这就是传递的

实际上,C 是一种仅按值传递的语言。传递变量时,传递变量的值。当你传递一个指针时,就像&PageAddr的地址PageAddr变成了传递的值。

稍后,在被调用的函数中,您可以使用地址值来查看或更改该地址中存储的内容。

这与允许通过引用传递的语言(如 C++ 或 Java)形成对比,其中传递了对值的引用,在这种情况下,您对引用或对引用执行的任何操作实际上都是对原始变量执行的。

于 2012-12-17T10:32:43.310 回答