gpt4 book ai didi

c - 在c中的函数中返回一个不同类型的值

转载 作者:行者123 更新时间:2023-11-30 17:35:41 24 4
gpt4 key购买 nike

嗯,我有一个用于在 c 中模拟动态数组的库。所以我有不同的函数来创建列表并向其中添加节点。在主函数中,假设使用该库的人不知道列表是什么。

main()
{
list dinarr = new_list(3,'d');

在本例中,它将创建一个包含三个节点的列表。在结构列表中,我只有一个数据类型 char data[60]。然而,用户很容易认为它是 double 的数组类型。

  double x = 2.5;
dinarr = put_list(dinnar,1,&x);

这里我有一个函数,给定一个位置,它将在该节点中放置一个值。该数组被声明为 double,因此用户输入 double 数组是合乎逻辑的。但是,由于我不知道用户创建的另一个数组是什么类型,因此我在该函数中有一个 void 指针,给定数组的类型(在本例中为 double ),将 void 指针转换为双指针并将其转换为字符,这样我就可以将该数据放入列表中。我在这里没有任何问题。

  double y = 0;
y = get_list(dinnar,1);

这是我有一个 double var 调用 y 的东西,因为我创建了一个 double 数组,然后在 get_list 中我发送位置和列表,因此该函数将为我带来用户需要的数据。在该函数中,我有一个开关,如果数组的数据类型为 d( double )、c(字符)、s(字符串)、i(整数)或 f(浮点)。它将结构列表的 char 数据转换为数组在本例中为 double 的类型。但我不知道如何仅用一个参数返回不同类型的数据。我使用了一个结构体,但是我必须在 main 中声明该结构体,这样做的主要目的是用户不会注意到。

}

那么我应该声明什么类型的函数呢?我使用了 void 指针和结构,但它对我不起作用,因为用户不应该知道我的库中发生了什么。

最佳答案

你不能实现这一点,C 不支持重载或具有相同名称但不同返回类型的多个函数。

您可以通过让列表 getter 获取指向调用者想要结果的指针来解决这个问题:

double y;
get_list(dinnar, &y);

在底层,您的列表模块会复制该值,因为它知道(来自 'd' 格式说明符)所需的大小。当然,您可以将该部分概括为仅采用 size_t itemSize 而不是格式字母,以使列表能够处理任何大小的项目。

虽然使用起来不太方便,但很难改进。

关于c - 在c中的函数中返回一个不同类型的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22963883/

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