私はいくつかの場所で、標準に準拠したC実装では、異なるタイプのポインターが異なる表現を持つ可能性があることを読みました。これは、ポインタ引数をprintfにキャストする必要があることの1つです。
int foo;
printf("address is %p\n", (void *) &foo);
私はこれに懐疑的で、C99標準(ドキュメントWG14 N1256、http: //www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdfで入手可能)を調べました。6.2.5.27では、次のようになります。
voidへのポインタは、文字型へのポインタと同じ表現および配置要件を持つ必要があります。同様に、互換性のあるタイプの修飾バージョンまたは非修飾バージョンへのポインターは、同じ表現および配置要件を持つ必要があります。構造体タイプへのすべてのポインタは、互いに同じ表現と配置の要件を持つ必要があります。共用体型へのすべてのポインターは、互いに同じ表現および配置要件を持つ必要があります。 他のタイプへのポインタは、同じ表現または配置要件を持つ必要はありません。
したがって、実際には、準拠するC99実装が、さまざまなタイプのポインターにさまざまな表現を使用できるように聞こえます。
私の質問はこれです:異なるタイプのポインタに異なる表現を実際に使用するCの実装/アーキテクチャは何ですか?