指针或价值

时间:2013-01-31 10:28:07

标签: c pointers c99

我打电话的时候:

write_byte((uint8_t*)0);

它传递一个空指针。如何修改它以传递指向文字值0的指针?

4 个答案:

答案 0 :(得分:3)

它传递一个NULL指针。

您无法获取常量(&0)的地址。如果要将指针传递给值0,则必须先将0指定给变量。

uint8_t i = 0;
write_byte(&i);

答案 1 :(得分:1)

使用复合文字:

write_byte(&(int) {0});

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

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

(我相信你可能会将整数文字与字符串文字混淆,它总是有一个地址。)