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

标签 c function types type-conversion

嗯,我有一个用于在 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/

相关文章:

javascript - 返回上一页时变量未定义

php - Smarty:是否可以在模板中调用 PHP 函数(从 Controller 类)?

go - 如何创建从匹配模式的字符串派生的 Go 类型?

c - C中如何让用户指定多维数组的大小

c++ - 使用 OpenMP 并行运行的最简单示例

c - Bison 推纯解析器中的堆处理

javascript - JS 恢复默认/全局函数

c - 重复,但仍然使用标准输出

c - 无法处理号码 600851475143,但我可以完美处理 13195

c# - 从全名创建 C# 类型