0

私が電話するとき:

write_byte((uint8_t*)0);

nullポインタを渡します。リテラル値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 に答える