[英]initialize and apply structure-parameters using function pointers as structure members
在下面的代码中:
#include <stdio.h>
#include <stdlib.h>
typedef struct{
int a;
int b;
int (*func1)();
int (*func2)();
}STR_X2;
void init(STR_X2 self , int _a , int _b){
self.a = _a;
self.b = _b;
printf("Init a:%d, b:%d \n",self.a,self.b);
}
int multiply(STR_X2 self){
printf("Multiply a:%d, b:%d, res:%d\n",self.a,self.b,self.a*self.b);
return self.a*self.b;
}
int main(void) {
static STR_X2 val2;
val2.func1 = init;
val2.func2 = multiply;
printf("set values of a and b using init() function\n");
val2.func1(val2,3,5);
printf("result:%d\n",val2.func2(val2));
printf("\nset values of a and b directly\n");
val2.a=3;
val2.b = 5;
printf("result:%d\n",val2.func2(val2));
return EXIT_SUCCESS;
}
结构STR_X2
具有两个成员作为函数指针。
func1
设置为init()
并设置参数a
和b
ses值。 func2
设置为multiply()
并将a
和b
相乘 通过运行代码,我得到以下结果:
set values of a and b using init() function
Init a:3, b:5
Multiply a:0, b:0, res:0
result:0
set values of a and b directly
Multiply a:3, b:5, res:15
result:15
这意味着使用func1()
初始化参数不起作用。
有人可以帮我找出这段代码有什么问题吗?
谢谢
您在init
按值取STR_X2
并multiply
-这将导致复制。 用指针代替它修改您在main
声明的static
实例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.