私が電話するとき:
write_byte((uint8_t*)0);
nullポインタを渡します。リテラル値0へのポインターを渡すように変更するにはどうすればよいですか?
NULL ポインターを渡します。
定数 ( ) のアドレスを取ることはできません&0
。value へのポインターを渡したい場合は、最初に変数0
に代入する必要があります。0
uint8_t i = 0;
write_byte(&i);
複合リテラルを使用します。
write_byte(&(int) {0});
NULL
ポインタが送信されます...
リテラルには必ずしもアドレスがあるとは限らないため、コンパイル時にリテラルのアドレスを取得する方法はありません。
たとえば、if(0)
のようなコードを記述した場合、0
はどこにも割り当てられていない可能性があります。コンパイラはそれを機械語命令「ゼロの場合分岐」(または最適化のために「常に分岐」する可能性が高い) に変換します。したがって、実際のゼロはプログラム コード自体に埋め込まれます。
このため、リテラルが格納されている場所をコンパイル時に知る方法はありません。プログラム コードに統合することも、読み取り専用メモリに常駐させることもできます。コンパイラ自体は、ソース コードをマシン コードに変換するまではわからないため、どれがどれかを知ることはできません。
(整数リテラルと、常にアドレスを持つ文字列リテラルを混同する可能性があると思います。)