Re: 構造体をポィンタで使用するとエラーとなる
神戸隆行 <kando@nerimadors.or.jp> writes:
> > あぁ、そうか。Hoge の最初のint member にアクセスするのに、pI
> > にキャストしてもうまくいくとは限らないってことね。そういうア
> > ーキテクチャってあるのかな?
>
> まぁ、それはあるんですけれども…。
> ポインタをアドレスを指すものと意味づければ殆どの場合に多分動くんですが…。
>
> 形式的な意味に従って型の違うポインタへのキャストは極力避けておいた方がいいかと。
> 構造体へのポインタと先頭のメンバへのポインタを不用意に混同してキャストして使ってると
> なんといっても読み難いですし、
読み難いし、不用意にしない方がよいのは同意ですが、ちょっと language
lawyer っぽい小うるさいことをいわせていただくと、
6.7.2.1 Structure and union specifiers
... A pointer
to a structure object, suitably converted, points to its
initial member (or if that member is a bit-field, then to
the unit in which it resides), and vice versa. There may be
unnamed padding within a structure object, but not at its
beginning.
ですので、Cでは一応どの環境でも動きます。
(まあ、普通は、
&(struct_ptr->initial_member)
と書くだろうとは思いますが。)
前田敦司
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735