C语言结构体内部的函数指针有什么意义

作者&投稿:能可 (若有异议请与网页底部的电邮联系)
C语言:在结构体内部定义函数指针?~

C语言_071_指针的定义和使用_上

=============================
&st为取结构体的首地址,即通过地址传递st
楼下给结构体函数指针声明参数者多此一举,
楼下不使用math.h中pow函数者的代码在print函数里实现了计算与显示,其代码内聚度非常差(即功能不单纯),且要求中以有要求写power功能,c作为面向过程编程应该高内聚度低耦合度。另外其实现的求幂只能局限与整数幂,也为败笔。
以下代码纯粹是按要求实现,没有对作者原型做任何修改
==============================
//
//func.c
//To compile, use: cl func.c

#include
#include
typedef struct{
int i;
double x;
void (*o)();
void (*p)();
} ST;
void print(ST* st);
void power(ST* st);
int main()
{
ST st={2,2.5,print,power};
st.p(&st);
st.o(&st);
return 0;
}
void print(ST* st)
{
printf("结果为%f",st->x);
}
void power(ST* st)
{
st->x=pow(st->x,st->i);
}

//在结构体中包含函数指针,
//这样,可以使用结构体,调用函数。
//这个有点像C++的面向对象的类 
//十分好用。 
#include "stdio.h"  
struct DEMO  
{  
    int x,y;  
    int (*func)(int,int); //函数指针  
};  
int add2(int x,int y)  
{  
    return x+y;  
}  
int main()  
{
int ret=0;
    struct DEMO demo;  
    demo.func=&add2; //结构体函数指针赋值  
    ret=demo.func(3,4);
    printf("func(3,4)=%d
",ret);  
}



C语言在结构体里如何调用time()函数
include void gettime(char *days) { \/\/days足够长 time_t rawtime;struct tm *timeinfo;time(&rawtime); \/\/ rawtime储存了自1970年1月1日00:00的秒数 timeinfo = localtime(&rawtime);sprintf(days,"%d.%d.%d",timeinfo->tm_year+1990,timeinfo->tm_mon+1,timeinfo->tm_mday);}...

c#语言中,结构体和类的区别?
在“实例和变量”层面上,由于结构是数值类型的,因此每一个结构变量会永远的绑定到结构实例上。然而类是引用类型的,而且对象变量可引用不同的类实例,在此方面的区别,会对使用将结构和类造成如下的影响:15,结构变量会隐式的使用结构的无参数构造函数来初始化成员,这就意味语句 Struct S = new ...

C语言中结构体嵌套后如何放到函数体中
以形参的形式放入函数体进行操作,只需要将形参和实参类型匹配就可以了。比如a[i].riqi.year是int型,那么你的函数就可以写成void fun(int i)。

c语言中结构体变量成员自加自减后其值会变吗
会的 每个变量成员 其实都是一个普通变量 自加自减后 自然会改变值。比如 struct A{ int m;};struct A a;a.m=100;a.m--;执行后 a.m就是99了。

C++语言 结构体互相引用
在结构体a(在c++中被扩充成了类)你定义了函数init,其中访问了struct b的成员,而此时b还未定义。记住:编译器是从上到下扫描的,所以它不知道b.z0相对于struct b开始的偏移是多少,所以它生成不了有效的代码 --- 如果想在两个结构中互相定义另一结构的变量,则最好使用指针,因为编译器知道指针...

C\/C++ 类和结构体的差别
2、结构体也可以被认为是一种特殊的类,它不存在任何函数,构造和析构函数也没有,而且是一个公共的的类。3、结构体在默认情况下成员是公共的(public),类在默认情况下成员是私有的(private)。4、C++结构体内部成员变量及成员函数默认的访问级别是public,而c++类的内部成员变量及成员函数的默认访问...

关于C语言结构体指针的一个疑问?
此处每个节点使用的是局部变量,函数结束后,局部堆栈虽然内容不会清除,但内存会被回收,如果其它地方也使用堆栈可能会分给它用,内存内容就会改变。正确的方式是申请堆内存。使用malloc函数,同时包含头文件#include<stdlib.h>。框内代码改成:struct student *b = (struct student*)malloc(sizeof(struct...

C语言在一个函数里面定义了一个结构体,怎么在另外一个函数里面使用...
在另外一个函数里面使用的源代码如下:include"stdio.h"include "conio.h" \/\/---添加这个头文件,因为getch()函数来自它,否则编译会有警告 struct student \/*定义结构体*\/ { void main(){ void data_in(struct student putin[]);void data_out(struct student *p);void data_pout(struct ...

c语言中如何用子函数调用结构体中的变量实现数据的输入与输出。_百度...
用子函数实现结构体数据的输入与输出:对于多数子函数的输入与输出,有一定规律性可言。方法1:void型不传值传址调用与声明。main中声明void date_in(),void date_pout()。函数定义前一定在main()前先定义结构体变量(全局变量),然后定义输入或输出程序段。此时再main()调用即可。如下:struct ...

求高手指教c语言函数怎么返回结构体
include "stdio.h"struct abc{ int a;int b;char *p;};struct abc myabc(void){ struct abc n;n.a=2;n.b=3;n.p=(char *)0x00FF3304;return n;}void main(void){ struct abc x={1,2,(char *)0x00FF3300},y;y=myabc();printf("%d %d %p\\n%d %d %p\\n",x.a,x.b,x...

通海县15975445846: C语言结构体内部的函数指针有什么意义 -
通石依卡: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22//在结构体中包含函数指针, //这样,可以使用结构体,调用函数. //这个有点像C++的面向对象的类 //十分好用. #include "stdio.h" structDEMO {intx,y;int(*func)(int,int); //函数指针 }...

通海县15975445846: C语言的指针有什么用?编程不一定要用指针吧?请高手指点一下. -
通石依卡: 指针是值得重视的.编程不一定用指针,可以用数组.但是,对编程来说,一般指针就占用4个字节,保存某个变量、结构体甚至是函数的地址.程序运行,直接按地址跳转是非常快的,效率很高.比如:多个函数用到一个很大的数组,如果用这个数组的地址来传递信息,一是不用把整个数组传到其他地方(复制,浪费空间和时间),二是效率很高.在追求效率和空间的时候,就必须得考虑指针.如:嵌入式系统或者软件 总之,不要害怕指针,指针有指针的规律,刚开始学习,比较难懂,没关系,慢慢就熟悉了.编程就像数学,越练习,越能写出好的代码.希望对你有帮助.

通海县15975445846: C语言:在结构体内部定义函数指针? -
通石依卡: functionpointer就是函数指针,指向一个函数,该函数的原型类似 void function(pStruct_X * p)P.functionpointer,就等于是调用该函数了.不过你的代码中,没写初始化,到底这个函数指针是指向哪个函数.

通海县15975445846: 求解释c语言函数指针的作用 -
通石依卡: 你上面那一段话,对于初学者来说确实坑爹,说的像什么官方话语,我看着也就只能理解个模糊大概. 先给你举个例子吧,函数指针的写法 int *p; int a; p=&a; //这是一般整型指针 #include using namespace std; int arr(int a,int b){return 0;}//比...

通海县15975445846: C语言的指针有什么实际作用? -
通石依卡: 指针实际上就是一个内存地址,比如一个函数指针,就是一个函数的入口地址,通过这个地址,系统就可以找到这个函数的位置并调用它.简单地说指针就是指向变量和对象的地址.指针的用途非常广泛,比如如果你想通过函数改变一个变量的值,就得用指针而不能用值传递.还有在很多时候变量,特别是对象的数据量实在太大,程序员就会用指针来做形参,只需要传递一个地址就行,大大提高了效率.以上还只是指针的初步应用,随着你在C++学习上的逐步深入,你会发现更多的用途的.

通海县15975445846: c语言中函数指针是什么 有什么用 举个实例 -
通石依卡: 函数指针是指向函数的指针变量. 因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数.这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数.函数指针有两个用途:调用函数和做函数的参数.函数指针的...

通海县15975445846: 用指向结构体的指针来定义函数 怎么理解 怎么用,求高手看看下面的代码帮忙解释一下 C语言 -
通石依卡: 这不是定义函数,是定义函数的类型,就是说函数返回值的类型是个指向结构的指针. 比如你的函数,返回的 m就是指向这个结构的指针,当然指针一定要赋值.一般的做法是 m = (Matrix)malloc( sizeof(sMtx) ) ; // 分配空间 if( !m ) return NULL ; // 分配失败 ...... return m ; // 返回空间 你不能返回一个局部的结构,因为如果是局部的,在函数返回的时候,这个局部结构已经被销毁,比如这样写就是错误的 sMtx n ; m = &n ; ....... return m ; // 返回之后n已经不存在

通海县15975445846: C语言里面指针到底有什么作用啊 -
通石依卡: 用处大了啊.楼主.你学了指针以后就会知道了.比如说和结构体的结合使用.使得文件操作.以及链表的应用更加方便.指针式直接对内存的操作.很多情况都很方便.但是刚开始学的话也容易出错.比如说在与函数结合的时候.总之楼主努力学习吧.见得多了就知道了.其实并不太难.(*^__^*) .不知道能不能帮上你...

通海县15975445846: C语言指针到底有什么用 -
通石依卡: 所谓指针就是一个地址,它必须初始化才能使用,所谓初始化就是要指向一个目标.它的作用是,比如你在main函数里定义了一个const int a = 100,如果你想改变a的值,那么一般的办法就行不通了,这个时候就能用到指针了,你定义一个指针指向a,然后通过指针对a的空间进行操作达到改变a的目的.当然一般人是不会这样干的,这里只是为了说明指针的一个作用而已,指针能帮助你完成一些复杂的计算,用处很大.

通海县15975445846: 结构体里的函数是怎么回事? -
通石依卡: C语言的结构体和C++中的类有一个区别是 在默认的情况下 结构体中的成员是公有的,而class中却是私有的 所以结构体中有函数是完全允许的,只不过我们的C语言教材没有写罢了

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网