ポインタへのポインタのバイトサイズは? 通常のポインタのバイト サイズと同じですか (通常、32 ビット マシンでは 4、64 ビット マシンでは 8 - 常にではありません)。
例えば:
int *p;
int **q;
ポインタqへのポインタは何でしょうか?
標準は、ポインタのサイズが等しいことを保証しません。sizeof(char)が1に等しいことを保証するだけです。
したがって、のサイズはのint *
サイズと同じである必要はありませんfloat *
。
したがって、質問に答えるために、aのサイズがのint *
サイズと等しくなることは「保証」されていませんint **
。
しかし、ほとんどのコンパイラでは、のint *
サイズはのサイズと同じです。int **
これがC99の作品です:6.2.5.26
voidへのポインタは、文字タイプへのポインタと同じ表現および配置要件を持っている必要があります。(39)同様に、互換性のあるタイプの修飾バージョンまたは非修飾バージョンへのポインタは、同じ表現および配置要件を持っている必要があります。構造体タイプへのすべてのポインタは、互いに同じ表現と配置の要件を持つ必要があります。共用体型へのすべてのポインターは、互いに同じ表現および配置要件を持つ必要があります。他のタイプへのポインタは、同じ表現または配置要件を持つ必要はありません。
39)同じ表現と配置の要件は、関数への引数、関数からの戻り値、および共用体のメンバーとしての互換性を意味することを意味します。
質問している言語バージョンを正確に指定していません。C99 sez:
オブジェクトまたは不完全な型へのポインタは、別のオブジェクトまたは不完全な型へのポインタに変換される場合があります。結果のポインタがpointed-toタイプに対して正しく整列されていない場合57)、動作は定義されていません。それ以外の場合、再度変換すると、結果は元のポインターと同じになります。
セクション6.3.2.3で
これにより、すべてのポインタが同じサイズのように動作することが保証されます。
うーん、ダメ。ポテトスワッターが指摘したように。変換能力は同じサイズを保証するものではありません。