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

时间:2014-04-09 13:22:02

标签: c function types type-conversion

我有一个用于在c中模拟动态数组的库。所以我有不同的功能,创建一个列表并添加节点。在main函数中,假设它正在使用库的人不知道列表是什么。

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

在这种情况下,它将创建一个包含三个节点的列表。在结构列表中,我只有一个数据类型char数据[60]。但是,用户很好地认为它是double类型的数组类型。

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

这里我有一个函数,给定一个位置,将在该节点中放置一个值。数组被声明为double,因此用户输入双数组是合乎逻辑的。但是,由于我不知道用户创建的另一个类型的数组,我在该函数中有一个void指针,给定数组的类型(在这种情况下为double)将void指针转换为a双指针和一个char,所以我可以将该数据放在列表中。在这里,我没有任何问题。

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

这是我有一个双var调用y,因为我创建了一个双数组,然后在get_list中我发送位置和列表,因此该函数将为我带来用户需要的数据。在该函数中,我有一个开关,如果数组的数据类型是d(double),c(char),s(string),i(int)或f(float)。它将结构列表的char数据转换为数组在这种情况下为double的类型。但我不知道如何只用一个参数返回不同类型的数据。我使用了一个结构,但后来我必须在main中声明该结构,其主要目的是用户没有注意到。

}

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

1 个答案:

答案 0 :(得分:0)

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

您可以通过使列表getter获取指向调用者想要结果的位置的指针来解决它:

double y;
get_list(dinnar, &y);

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

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