重複の可能性:
空隙のサイズは?
こんにちは、みんな !C プログラムのコンパイルに gcc を使用していますが、C で sizeof(void) が 1 バイトであることを偶然発見しました。
これについて何か説明はありますか?私はいつもそれがゼロだと思っていました(本当に何も保存されていない場合)!
ありがとう !
これは gcc の非標準拡張機能ですが、理論的根拠があります。ポインター演算を行う場合、1 つの単位を追加または削除することは、サイズを指すオブジェクトを追加または削除することを意味します。したがって、1 として定義すると、バイト (型指定されていないメモリ アドレス) へのポインターとしてsizeof(void)
定義するのに役立ちます。void*
そうしないとp+1 == p
、 p がvoid*
.
標準的な方法は、そのような目的 (バイトへのポインター) に `char* を使用することです。
これは gcc 固有の機能です。ここを参照して ください http://gcc.gnu.org/onlinedocs/gcc-4.4.2/gcc/Pointer-Arith.html#Pointer-Arith
また
as typesizeof(void)
を使用しないため、通常は要求しません。void
あなたが実験している動作は、特定のコンパイラに依存すると思います。私のgccでも1を返します。