6

重複の可能性:
空隙のサイズは?

こんにちは、みんな !C プログラムのコンパイルに gcc を使用していますが、C で sizeof(void) が 1 バイトであることを偶然発見しました。

これについて何か説明はありますか?私はいつもそれがゼロだと思っていました(本当に何も保存されていない場合)!

ありがとう !

4

3 に答える 3

7

これは gcc の非標準拡張機能ですが、理論的根拠があります。ポインター演算を行う場合、1 つの単位を追加または削除することは、サイズを指すオブジェクトを追加または削除することを意味します。したがって、1 として定義すると、バイト (型指定されていないメモリ アドレス) へのポインターとしてsizeof(void)定義するのに役立ちます。void*そうしないとp+1 == p、 p がvoid*.

標準的な方法は、そのような目的 (バイトへのポインター) に `char* を使用することです。

于 2010-07-28T07:14:08.863 に答える
1

これは gcc 固有の機能です。ここを参照して ください http://gcc.gnu.org/onlinedocs/gcc-4.4.2/gcc/Pointer-Arith.html#Pointer-Arith

また

空隙の大きさは?

于 2010-07-28T07:09:22.683 に答える
0

as typesizeof(void)を使用しないため、通常は要求しません。voidあなたが実験している動作は、特定のコンパイラに依存すると思います。私のgccでも1を返します。

于 2010-07-28T07:11:22.327 に答える