なぜsizeof
voidポインタなの2
ですか?
5 に答える
aのサイズvoid*
は、プラットフォームに依存する値です。通常、その値は32ビットプラットフォームと64ビットプラットフォームでそれぞれ4バイトまたは8バイトです。値として2を取得している場合は、16ビットコーディングプラットフォームで実行されている可能性があります(またはコーディングエラーが発生している可能性があります)。
使用しているコードと、環境/オペレーティングシステムに関する詳細情報を投稿していただけますか?
6.2.5 型
...
27 void へのポインタは、文字型へのポインタと同じ表現およびアラインメント要件を持たなければならない。39) 同様に、互換性のある型の修飾または非修飾バージョンへのポインタは、同じ表現およびアラインメント要件を持つものとします。構造体型へのすべてのポインターは、互いに同じ表現とアライメントの要件を持つ必要があります。共用体型へのすべてのポインターは、互いに同じ表現とアライメントの要件を持つ必要があります。他の型へのポインターは、同じ表現またはアライメント要件を持つ必要はありません。
システムで void ポインターと char ポインターのサイズが 2 である理由については、16 ビット プラットフォームを使用しているためだと思われます。
ポインタは、別のものを指すメモリ アドレスを格納します。ポインターのサイズは、プラットフォームによって異なります。32 ビット プラットフォームでは、メモリ アドレスを格納するために 32 ビットまたは 4 バイトが必要なため、ポインタのサイズは 4 を返します。
sizeof(void*) が 2 の場合、おそらく 16 ビット プラットフォームで実行しています。
JaredPar がすでに指摘したように、これはプラットフォームに依存します。別の言い方をすれば、使用されている CPU はメモリ アドレス指定に何ビットを使用しますか? 16 ビット アドレスの場合、サイズは 2 バイトになります。16 ビット マイクロコントローラー用のコードをコンパイルしていますか?