繁体   English   中英

使用函数指针作为结构成员初始化和应用结构参数

[英]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()并设置参数ab ses值。
  • func2设置为multiply()并将ab相乘

通过运行代码,我得到以下结果:

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_X2multiply -这将导致复制。 用指针代替它修改您在main声明的static实例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM