An agregate type is a structure or class or union that holds (possibly) an agregate of serveral members of other types.
In you print function you do not have an agregate type you have a pointer to an aggreagate type. You can get the agregate type by dereferencing the pointer so for a structure type T
T* pointer = &obj; // Always initialise pointers
obj.member; // Access a member of an agregate type
pointer.member; // Error pointer is not an agregate type it is a pointer to an agregate type
(*pointer).member; // OK pointer is derefernced to the agregate type
pointer->member; // The -> operator is a shortcut for above syntax