Inheritance from a superclass can be implemented in C by having the superclass struct be the first entry in a derived class struct (see, e.g. Rumbaugh). Thus all the attributes and operations of the superclass are included in the derived class. Since the superclass methods begin accessing the data objects they receive based on the pointer to the start of the struct, and they have no knowledge of memory in the struct beyond this, derived objects can be input into methods of either the superclass or the derived class.
Though this method cannot support multiple inheritance, it is an efficient way of reusing the same implementation of an operation for multiple classes. For example, a Vector class and a Matrix class that inherits from the Vector class can both use the same set of elementwise Vector operations. Typically an elementwise Matrix operation would be created corresponding to each elementwise Vector operation and assigned the function pointer from the Vector operation. Thus a programmer might pass a Matrix object into a Matrix_Clear method and not be aware that the operation was actually a Vector_Clear performed on the Vector embedded in the Matrix object.