c does have structs, you know.
...and you can make arrays out of structs.
so it would be users[123]->name and users[123]->password
oop is a concept, java is just one implementation.
the point of oop is information hiding via message passing.
this is from the most autoritative source:
OOP to me means only messaging, local retention and protection and
hiding of state-process, and extreme late-binding of all things. It
can be done in Smalltalk and in LISP. There are possibly other
systems in which this is possible, but I'm not aware of them.
everything else you found in high level languages are just aid for that conceptual model of programming. don't read me wrong: I love Java, I love a subset of c++ (the one that allow to keep your sanity). I would not even think to program in plain C ever again, and all the object/classes/inheritance and stuff high level languages provides are most welcome as allow for a clean and lean implementation of that conceptual model.
but there is nothing more than that in OOP. it takes only a bit of effort to make it work in plain c.
oop in c isn't pretty, but works in the same way that oop works in java.
make a struct instead of a class, make method accepting the struct pointer name self as first argument and you're set.
for more contrive examples I'll redirect you there:
http://stackoverflow.com/questions/415452/object-orientation-in-c/415536#415536
but all of that is just contrived mumbojumbo for porting java concepts in c (but oop is not about inheritance and polymorphism)