可以在C中编写特定结构的函数吗?

时间:2015-05-18 15:57:22

标签: c struct

我现在正在学习C,并且刚刚介绍了结构。似乎结构只能有成员但没有方法限制在给定的结构中。假设我想为链表编写一个add方法。

在Java中,我将创建一个链表类并在该类中编写一个方法:

public void add(Node toAdd) {...}

在C中,我可以编写一个函数,该函数接收链表或指向链表的指针,并通过添加节点来修改它。但有没有什么方法可以像Java那样更类似地做到这一点?

我担心我会有一个大量的功能文件而其他组织很少......或者这只是C的痛苦和Obj-C改进的东西?

2 个答案:

答案 0 :(得分:2)

是的,有一种方法可以在C中进行。您正在寻找的具体答案称为函数指针。

您可以在struct中声明一个函数指针,该函数指针链接到您在文件中其他位置定义的函数。

以下stackoverflow讨论与此相关。 here

这是另一个相关的讨论,指出C struct不支持X3lif建议的功能。在讨论中,解决方案是函数指针。

C - function inside struct

答案 1 :(得分:2)

你可能会混淆这里的一些概念。您无法将Java与C进行比较,但您可以将Java与C ++进行比较。

  • C用于低级编程,不支持面向对象的编程。
  • C ++是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语言。