当我打电话时:
write_byte((uint8_t*)0);
它传递一个空指针。如何修改它以将指针传递给字面值 0?
它传递一个 NULL 指针。
您不能获取常量 ( &0
) 的地址。如果你想传递一个指向 value 的指针0
,你必须先赋值0
给一个变量。
uint8_t i = 0;
write_byte(&i);
使用复合文字:
write_byte(&(int) {0});
它会发送一个NULL
指针...
在编译时无法获取文字的地址,因为文字不一定有地址。
例如,如果您编写类似 的代码if(0)
,0
则很可能不会在任何地方分配。编译器会将其转换为机器代码指令“如果为零则分支”(或更可能是“始终分支”,因为优化)。所以实际的零被嵌入到程序代码本身中。
因此,在编译时无法知道文字的存储位置。它可以集成到程序代码中,也可以驻留在只读存储器中。您无法知道是哪一个,因为编译器本身在将您的源代码翻译成机器代码之前并不知道。
(我相信您可能会将整数文字与始终有地址的字符串文字混淆。)