Even if you pass a pointer to some stuff, none is to say that this pointer is used elsewhere, too.
Pointers are flexible and powerful and therefore comes at a price.
Oh yes, good point.Absolutely C knows the types of variables passed to functions because that information is available from the parameter list. The only contexts in which it isn't available include variadic functions (such as printf) and macro functions. Just wanted to clear that up, since this piece of advice is more about printf than it is about C or variables in general.