c语言里结构体里有函数的使用方法

wuanan111111 2012-07-06 06:23:14
先帖下代码:
struct srep
{
char *s ;
int n ;
srep() ;
} ;



问下大家?这个结构体里的函数是干什么用的呢?越详细越好
...全文
32588 25 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kylin0927 2014-12-15
  • 打赏
  • 举报
回复
2L正解! 楼主可以去看看C++里的"类和对象的概念",应该会对理解这种情况有很好的帮助. 这可以大概的比喻为这种情况.比如,小狗,我们可以把他看作是一个类,属性就是你现在看到的所谓"结构体变量" 比如按照C++写法(大概,省略函数/方法实现) Class Dog { int age;//狗可以有自己的年龄 char[20] name;//狗可以有自己的名字 float size;//狗可以有自己的大小 void jump();//这个地方就是类似于你结构体内的函数,在C++类中被称为方法 //以上写的这些都可以被声明为public,private,protected Dog();//这个被称为构造函数; }; void main() { Dog dog1;//实例化类的一个对象,小狗狗1 dog1.jump();//狗狗进行跳跃(对象是用自己本身的方法) return; } 在C语言中,结构体和这个非常类似.
南蛮小子 2014-12-11
  • 打赏
  • 举报
回复
结构体在C++中是特殊的类,可以包含函数,当然构造函数也是可以的。还可以声明为私有的或公有的
wangen12345 2014-08-16
  • 打赏
  • 举报
回复
要相信编译器啊。。。。
707wk 2014-08-16
  • 打赏
  • 举报
回复
都说没想好 2014-08-16
  • 打赏
  • 举报
回复
你去变成class
durant 2014-08-15
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <stdbool.h>
#include <memory.h>
#include <stdarg.h>

/*
 * Usage: if(eVariable == data1)
 */
typedef enum __gender
{
    MALE = 0x01,
    FEMAIL = 0x02
}genderTypeDef;

typedef struct __stu
{
    char * name;
    float score;
    genderTypeDef gender;
    int number;
    void (*test)(struct __stu *thisSample);
}stuTypeDef ;


void print_stu_info(stuTypeDef * pstu)
{
    char * s = NULL;
    printf("struct size is %d\n", sizeof(stuTypeDef));
    printf("student name is: %s\n", pstu->name);
    printf("student number is: %d\n", pstu->number);
    printf("student score is: %.2f\n", pstu->score);
    if( (*pstu).gender == MALE)
        s = (char *)"MALE";
    else
        s = (char *)"FEMALE";
    printf("student gender is: %s\n", s);
}

void initia_stu(stuTypeDef *pstu)
{
    (*pstu).name = "wangjun";
    pstu->gender = MALE;
    pstu->number = 1;
    pstu->score = 99.99;
}
int main(int argc, char *argv[])
{
    stuTypeDef stu ;
    initia_stu(&stu);
    stu.test = print_stu_info;
    stu.test(&stu);
    return 0 ;
}
前几天学习这个写的代码
lm_whales 2014-08-15
  • 打赏
  • 举报
回复
这是C++,构造函数,其他不用再详细了。 至于函数指针存放在结构中, 这只是一种使用结构的办法, 和结构内部声明定义函数,是两种不同的语法 结构内定义函数,是C++语法。 结构内部定义函数指针,是C,C++通用的方法。
durant 2014-08-15
  • 打赏
  • 举报
回复
引用 7 楼 baichi4141 的回复:
[Quote=引用 3 楼 的回复:] 是的啊,有的说可以 http://zhidao.baidu.com/question/126247755.html http://zhidao.baidu.com/question/238492486.html 有的说不可以,我都不明白了,也只见过结构体中定义函数指针的用法! [/Quote] 第一,结构体里带函数这是C++代码,C语言的结构体里不可能带函数 至于扯什么函数指针也算函数之类的笑话的同学,你们直接说汇编语言包含一切编程思想的要素吧,可笑 第二,百度知道?会在乎那种东西,你不明白那真是理所当然
c中结构体里是可以带函数指针的
风行踩火轮 2014-08-14
  • 打赏
  • 举报
回复
这个是构造函数,和类的构造函数一样
huawenforever 2014-08-14
  • 打赏
  • 举报
回复
用gcc编译不过,用g++ 可以过,且能运行 这个应该是属于c++的语法吧
BYD123 2012-09-04
  • 打赏
  • 举报
回复
个人见解:
1)结构体是一种复合类型(相当于C++类),它把基本的类型或者其它的结构体聚集在一起。逻辑上是一整体,要使其在内存字节相邻的话(一般用作一段buffer或在网络上传输),可以使用编译器的相关指令。
2)结构体内可以定义函数指针变量,初始化结构时将给相应的指针指向函数名即可。
3)函数变量的定义可以在函数的声明前加typedef,然后将函数名用括号括起来,函数名前加“*
Alexander_QQ 2012-09-04
  • 打赏
  • 举报
回复
还有,注册了回调函数之后,这个结构体似乎就是一个类了。
Alexander_QQ 2012-09-04
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

引用 5 楼 的回复:

可以注册回调函数。。比如说struct C/C++ code

struct a {int (*p)(int );
int d;
};

对,用回调函数,结构体里保存函数指针,具体看下面的代码:
C/C++ code

#include <stdio.h>
//几个用于测试的函数
int max(int a, int b)
{
……
[/Quote]

说的不错,就是这样子用的。很多开源代码中经常会有这种写法,在结构体中注册回调函数,实际上就是保存一个指针而已。
proorck6 2012-09-04
  • 打赏
  • 举报
回复
C和C++是不一样的,需要仔细区分。
baichi4141 2012-07-07
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

是的啊,有的说可以
http://zhidao.baidu.com/question/126247755.html
http://zhidao.baidu.com/question/238492486.html

有的说不可以,我都不明白了,也只见过结构体中定义函数指针的用法!
[/Quote]
第一,结构体里带函数这是C++代码,C语言的结构体里不可能带函数
至于扯什么函数指针也算函数之类的笑话的同学,你们直接说汇编语言包含一切编程思想的要素吧,可笑

第二,百度知道?会在乎那种东西,你不明白那真是理所当然
灼眼的超哥 2012-07-07
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

可以注册回调函数。。比如说struct C/C++ code

struct a {int (*p)(int );
int d;
};
[/Quote]
对,用回调函数,结构体里保存函数指针,具体看下面的代码:

#include <stdio.h>
//几个用于测试的函数
int max(int a, int b)
{
return a>b?a:b;
}

int min(int a, int b)
{
return a<b?a:b;
}

//结构体
struct func
{
int (*max)(int, int);//函数指针
int (*min)(int, int);
};

typedef struct func func; //添加别名

void init(func *data)
{
data->max = max;//初始化函数指针
data->min = min;
}

int main()
{
int a, b;
func test;

init(&test); //初始化,你可以说它是构造函数

a = test.max(100, 215);
b = test.min(64, 42);

printf("result:\nmax: %d\nmin: %d\n", a, b);
return 0;
}

这是之前写过的。
AnYidan 2012-07-07
  • 打赏
  • 举报
回复
结构体中有函数就变成 class,

srep() 是函数?
Ever_lover 2012-07-07
  • 打赏
  • 举报
回复
可以注册回调函数。。比如说struct

struct a {int (*p)(int );
int d;
};
xiying12571 2012-07-07
  • 打赏
  • 举报
回复
这在 C++ 里面是构造函数, C 里面没有这种语法
a7411053 2012-07-07
  • 打赏
  • 举报
回复
类的构造函数,C++中struct相当于特殊的class,可以定义构造函数
加载更多回复(4)

70,020

社区成员

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

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