3

構造体の最初の要素のオフセットが0であることは保証ですか? より正確にするために、考えてみましょう

struct foo {
int a;
double b;
};
struct foo *ptr=malloc(sizeof(struct foo));
int *int_ptr = &ptr->a;
free(int_ptr)

OSやその他の要因の下で、常に有効であることが保証されていますか?

4

1 に答える 1

6

はい、保証されています。標準的な見積もりを取得します。調べさせてください。

C99 標準: §6.7.2.1

パラ12

構造体オブジェクト内では、非ビットフィールドメンバーとビットフィールドが存在するユニットには、宣言された順序で増加するアドレスがあります。適切に変換された構造体オブジェクトへのポインターは、その最初のメンバー (または、そのメンバーがビットフィールドの場合は、それが存在するユニット) を指し、その逆も同様です。構造体オブジェクト内に名前のないパディングがある場合がありますが、先頭にはありません。

于 2012-06-09T05:23:51.417 に答える