gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 14:55:15 25 4
gpt4 key购买 nike

在下面的代码中:

#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()初始化参数不起作用。
有人能帮我找出这段代码有什么问题吗?
谢谢

最佳答案

您在 initmultiply 中按值获取 STR_X2 - 这会导致复制。通过指针来修改您在 main 中声明的 static 实例。

关于c - 使用函数指针作为结构成员初始化和应用结构参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46093241/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com