I seem to remember Dirty Trick #1 had problems in certain situations, I just
cant remember them, as I normally use #2, or correct syntax if it is for sharing.
#1 doesn't work with assigning values to the pointer because you can't assign anything to the return value of a function (it would not make any sense at all)
ENTITY *ent = _ent_grid(x,y);
ent = ent_create(...);
this would be the same as your assignment in #1, but ent is a temporary variable which would be deleted after those both operations...