Sujet : Re: Regarding assignment to struct
De : Keith.S.Thompson+u (at) *nospam* gmail.com (Keith Thompson)
Groupes : comp.lang.cDate : 05. May 2025, 09:34:16
Autres entêtes
Organisation : None to speak of
Message-ID : <87o6w7h2wn.fsf@nosuchdomain.example.com>
References : 1 2 3 4
User-Agent : Gnus/5.13 (Gnus v5.13)
Andrey Tarasevich <
noone@noone.net> writes:
[...]
#include <stdio.h>
>
struct S { int a[10]; };
>
int main()
{
struct S a, b = { 0 };
int *pa, *pb, *pc;
>
pa = &a.a[5];
pb = &b.a[5];
pc = &(a = b).a[5];
>
printf("%p %p %p\n", pa, pb, pc);
}
[...]
I think that code has undefined behavior.
(a = b) is an rvalue that refers to an object of type struct S with
temporary lifetime. pc holds the address of a subobject of that
temporary object. The object reaches the end of its lifetime at the end
of the evaluation of the full expression. You then print its value.
And more obviously, "%p" requires an argument of type void*, not int*.
-- Keith Thompson (The_Other_Keith) Keith.S.Thompson+u@gmail.comvoid Void(void) { Void(); } /* The recursive call of the void */