我现在正在学习C,并且刚刚介绍了结构。似乎结构只能有成员但没有方法限制在给定的结构中。假设我想为链表编写一个add方法。
在Java中,我将创建一个链表类并在该类中编写一个方法:
public void add(Node toAdd) {...}
在C中,我可以编写一个函数,该函数接收链表或指向链表的指针,并通过添加节点来修改它。但有没有什么方法可以像Java那样更类似地做到这一点?
我担心我会有一个大量的功能文件而其他组织很少......或者这只是C的痛苦和Obj-C改进的东西?
答案 0 :(得分:2)
是的,有一种方法可以在C中进行。您正在寻找的具体答案称为函数指针。
您可以在struct中声明一个函数指针,该函数指针链接到您在文件中其他位置定义的函数。
以下stackoverflow讨论与此相关。 here
这是另一个相关的讨论,指出C struct不支持X3lif建议的功能。在讨论中,解决方案是函数指针。
答案 1 :(得分:2)
你可能会混淆这里的一些概念。您无法将Java与C进行比较,但您可以将Java与C ++进行比较。
所以你在寻找的东西在C中并不存在,而是在C ++中。在C ++中,您可以声明类:
class Foo {
int member;
void addToMember(int x) {
member += x;
}
};
在C中,没有课程。通常,您定义一个结构并创建一组在此结构上运行的函数:
struct Foo {
int member;
}
void fooInit(Foo *foo);
void fooAddToMember(Foo *foo, int x);
这实际上是一种古老的方式,如何使用不支持对象的语言完成某种面向对象的编程。
今天,没有人会这样做了。人们可以简单地使用C ++进行面向对象的编程。实际上没有必要坚持使用C.即使现在大多数微控制器都支持C ++或其他面向对象的语言,甚至现代操作系统内核也正在逐渐脱离纯C语言。