gpt4 book ai didi

c - 值和函数指针的 union

转载 作者:行者123 更新时间:2023-12-02 07:18:24 25 4
gpt4 key购买 nike

我正在为使用 union 而苦苦挣扎。为什么我无法将函数指针传递到 union 所在的位置?任何帮助将不胜感激。

编辑:删除了一个 typedef

#include <stdio.h>

union U {
int(*fnPtr)(int);
int i;
};

enum E {
OPTION_0 = 0,
OPTION_1 = 1
};

int multiply_by_two (int x) {
return 2 * x;
}

int f (int x, enum E e, union U u) {
switch (e) {
case OPTION_0:
/* Return the sum */
return x + u.i;
case OPTION_1:
/* Return 2 * x */
return u.fnPtr (x);
}
}

int main (void) {
int a;
scanf ("%d", &a);
int b = f (a, OPTION_1, &multiply_by_two);
printf ("%d\n", b);
return 0;
}

最佳答案

首先,这个定义是无效的:

union U {
typedef int(*fnPtr)(int);
int i;
};

structunion 中不能有 typedef。删除 typedef 将为您提供正确的定义:

union U {
int(*fnPtr)(int);
int i;
};

第二个问题在这里:

int b = f (a, OPTION_1, &multiply_by_two);

函数 f 需要一个 union U,但您传递给它的是一个 int (*)(int)。这些类型不兼容。仅仅因为 union 具有该类型的成员并不意味着您可以在任何要使用 union 的地方使用该类型。您需要创建一个 union ,设置适当的字段,然后将其传递给函数。

union U u;
u.fnPtr = multiply_by_two;
int b = f (a, OPTION_1, u);

关于c - 值和函数指针的 union ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54517241/

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