C 语言里 , struct 里到底能不能写函数?

languagec 2008-06-25 07:28:15
我前段时间去面试,碰到这门个问题:
C语言里,结构体 struct 里,能不能写函数?

我当时最后回答不能,可是面试官告诉我 , 能!并建议我看什么代码之类,大概是linix 的源代码,当时没听清。

我很疑惑,我请问一下给位英雄好汉,到底可不可以。
这个问题有两种理解,
1. 是下面这种形式
struct A
{
void Fun()
{
}
};

2.是下面这种形式
struct A
{

int i;
for(i=0;i<10;i++);

};

不知道有没有其他形式的理解。

不管是哪种,谁能实现其中一种? 或者,有什么证据证明可以或不可以?
...全文
3540 63 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
63 条回复
切换为时间正序
请发表友善的回复…
发表回复
liyue_2008 2011-07-06
  • 打赏
  • 举报
回复
不可以...
分析如下:
是存储空间的问题,你能想到如何分配存储空间么,分配多大?在c里结构体成员是可以指针访问的,
如果有函数,岂不是指针跑到代码段去了?如何跑回来,哪位面试官解释一下...

  • 打赏
  • 举报
回复
学习了……
FindFullMoon 2008-07-01
  • 打赏
  • 举报
回复
这样组织代码好像蛮好玩的。。
zhangjundriver 2008-06-27
  • 打赏
  • 举报
回复 1
在纯c当中struct就是个结构体,不可以定义函数,如果定义一个函数的指针,那也是一个数据成员,不是函数
也就是说在c中struct 只能包含数据成员;
这和C++里面的struct是两个完全不同的概念,因为struct和class有基本上是同样的作用,都可以拿来定义一个类,只是默认的访问限制:struct为public 而 class为 private,这就是他们的区别,其它的都一样

所以在c中的struct和c++的struct是不同的,有区别的,这是小弟的一点见解,不知道对不对!
program2050 2008-06-27
  • 打赏
  • 举报
回复
哇,又长见识了。函数指针。
但是为什么要这么麻烦呢。想写函数,直接编一个类不就可以了吗?
wargrey 2008-06-27
  • 打赏
  • 举报
回复
以前我曾考虑过一个问题,就是用c来写面向对象的程序,主要原理是结合函数指针和struct的内存分布。
但是直接写函数是不行的。
也许面试官说得是Object-c,这时Mac OS X的标准开发语言,Linux里面也有。估计它的struct能写函数。

Fuck这类面试题,你也可以问问你的面试官“C++或C#的struct里可不可以不写函数”
ww2734 2008-06-27
  • 打赏
  • 举报
回复
在C中绝对不能有函数,c++可以,这是c与c++的区别
Conry 2008-06-27
  • 打赏
  • 举报
回复
[Quote=引用 50 楼 icoding 的回复:]
引用 47 楼 LoocalVinci 的回复:
C是不行的,C要求相对严格,这样可以缓解编译器的压力,也给程序员更多的自由。
楼主可以考虑用函数指针来使用call back function,这是C语言里比较常用的方式。其实资深的程序员完全可以用struct,指针和少量的union构建出自己的OOA!


你写个我看看呢
[/Quote]

早期的c++编译器先把c++代码翻译成c代码,然后再用c编译器编译的
kill219111 2008-06-27
  • 打赏
  • 举报
回复
C是不行的,只能用函数指针成员
就呆在云上 2008-06-27
  • 打赏
  • 举报
回复
如果是c语言个人经验只能直接用函数指针,如果是c++可以直接定义函数的。
如果你看过内核源代码就应该有点印象,没有的话也应该看看
先引用人家的c代码:
#include <stdio.h>

#include <stdio.h>
void fun()
{
printf("hello,world\n");
}

struct test
{
void (*Fun)();
};

int main()
{
struct test t;
t.Fun = fun;

t.Fun(); //直接调用

return 0;
}


再给一个c++代码:
#include <iostream>
using namespace std;

typedef struct a {
void test() {}
} A;

int main(int argc, char* argv[])
{
A my_a;
my_a.test();
return 0;
}

gygl_4 2008-06-26
  • 打赏
  • 举报
回复

typedef int function(int a, int b);

typedef struct
{
function hi;
}TEMP_STRUCT;

....
hi(a,b);



zheyang?
Sco_field 2008-06-26
  • 打赏
  • 举报
回复
学习了,若是我的话,也会给出楼主一样的答案
太乙 2008-06-26
  • 打赏
  • 举报
回复
[Quote=引用 41 楼 bellbird 的回复:]
面试题都很变态,曾经参加个笔试,问开始菜单的快捷键是什么,有alt+esc,ctrl+esc,shift+esc等等,当时还真的不知道
[/Quote]

汗~!~~~~~~~~


ctrl+esc~!
嘿嘿~~


学习了!!
bellbird 2008-06-26
  • 打赏
  • 举报
回复
面试题都很变态,曾经参加个笔试,问开始菜单的快捷键是什么,有alt+esc,ctrl+esc,shift+esc等等,当时还真的不知道
codeangel 2008-06-26
  • 打赏
  • 举报
回复
??
night_legend 2008-06-26
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 fly4free 的回复:]
11楼,你给的地址怎么不好使?
[/Quote]
codeangel 2008-06-26
  • 打赏
  • 举报
回复
C++里,struct 就好比是 class
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 jixingzhong 的回复:]
函数指针方式实现,而不要直接定义函数 ...
[/Quote]
传说中的大侠终于出来了!~听大侠的……
lvxuef 2008-06-26
  • 打赏
  • 举报
回复
newlist002 2008-06-26
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 artman 的回复:]
函数指针呗.
[/Quote]
加载更多回复(43)

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧