c89不允许这样做,但c99允许。虽然花了很长时间才开始流行,但一些编译器(包括gcc)终于开始实现c99特性了。IMO,如果您想使用OOP,您可能应该坚持使用C++或尝试目标C。再次尝试在C之上重新创建OOP并没有多大意义。如果你坚持要这么做,是的,你可以传递一个指向结构的指针,作为对this的模仿--但这仍然不是一个好主意。
当您需要对数据结构进行操作时,传递(指针到)结构通常是有意义的。但是,我不建议非常努力地将函数组合在一起,让它们都将指向结构的指针作为它们的第一个参数,因为其他语言就是这样实现的。
如果您碰巧有一些函数都是用特定的结构操作的,并且它们都收到指向该结构的指针作为它们的第一个参数是非常有意义的,那就太好了--但是不要因为C++碰巧这样做就不得不强制它。
编辑:关于在没有对象的情况下如何管理:嗯,至少在我编写C时,我倾向于对单个字符进行更频繁的操作。值得注意的是,在C++中,我通常有几行相对较长的代码;而在C语言中,我倾向于使用大量的短行代码。
代码和数据之间有更多的分离,但在某种程度上它们仍然是耦合的--二叉树(例如)仍然需要代码来插入节点、删除节点、遍历树等等。同样,这些操作的代码需要知道结构的布局,以及指针的名称等等。
就我个人而言,我更倾向于在C代码中使用常见的命名约定,因此(举几个例子),指向二叉树中子树的指针总是被命名为left和right。如果我使用链接列表(罕见),指向下一个节点的指针总是命名为next (如果它是双链接的,则另一个是prev)。这对于能够编写代码非常有帮助,而不必花费大量时间查找结构定义来确定我这次使用的名称。