0

当我打电话时:

write_byte((uint8_t*)0);

它传递一个空指针。如何修改它以将指针传递给字面值 0?

4

4 回答 4

3

它传递一个 NULL 指针。

您不能获取常量 ( &0) 的地址。如果你想传递一个指向 value 的指针0,你必须先赋值0给一个变量。

uint8_t i = 0;
write_byte(&i);
于 2013-01-31T10:31:22.550 回答
1

使用复合文字:

write_byte(&(int) {0});
于 2013-01-31T11:09:27.493 回答
0

它会发送一个NULL指针...

于 2013-01-31T10:30:33.013 回答
0

在编译时无法获取文字的地址,因为文字不一定有地址。

例如,如果您编写类似 的代码if(0)0则很可能不会在任何地方分配。编译器会将其转换为机器代码指令“如果为零则分支”(或更可能是“始终分支”,因为优化)。所以实际的零被嵌入到程序代码本身中。

因此,在编译时无法知道文字的存储位置。它可以集成到程序代码中,也可以驻留在只读存储器中。您无法知道是哪一个,因为编译器本身在将您的源代码翻译成机器代码之前并不知道。

(我相信您可能会将整数文字与始终有地址的字符串文字混淆。)

于 2013-01-31T10:46:19.817 回答