没有C类型的参数

Vla*_*gas 0 c arguments argument-passing

我是编程语言的新手,并想知道是否可以将没有特定类型的参数传递给函数.例如,我有以下代码片段定义了一个add将占用内存块的函数,检查它是否通过另一个函数填充,然后将一个元素添加到与该内存块相关的列表中.

该元素可以是int,float或char.所以我想写:

add(arrs1,20); //or also
add(arrs2,'b'); //or also
add(arrs3, 4.5);
Run Code Online (Sandbox Code Playgroud)

其中arrs#定义为struct arrs arrs#,并且它们引用浮点数,整数或字符数组但不混合.我怎么能做到这一点?

int add(arrs list, NEW_ELEMENT){//adds NEW_ELEMENT at the end of an arrs
  int check_if_resize;
  check_if_resize=resize(list, list->size + 1);
  list->ptr[list->used++] = NEW_ELEMENT;
  return check_if_resize;
}
Run Code Online (Sandbox Code Playgroud)

我感谢您的帮助.

Frx*_*rem 5

根据设计,C不允许单个函数为每个参数接受多于一种类型.但是,有很多方法可以在C语言中执行相同的操作:

首先,您可以编写多个不同的函数来执行相同的操作,但是在不同的类型上.例如,代替add你可以有三个名为的函数add_int,add_charadd_float.在大多数情况下,我建议这样做,因为它是迄今为止最简单且最不容易出错的.

其次,您可能已经注意到如何printf打印字符串和数字?所谓的可变参数函数,printf可以使用不同类型的参数,但在这种情况下printf,您仍必须在格式字符串中指定所需的参数类型.

最后,void如果需要使用对象占用的内存,则可以使用指针,而不管其类型如何.函数喜欢memcpymemset执行此操作,例如将一个对象的内容直接复制到另一个对象.这有点难以正确管理,因为它很容易出错并最终破坏内存,但它仍然可行(有时甚至是最好的选择).

但是如果你是C语言的初学者,正如你所陈述的那样,第一个选项可能是最简单的选择,特别是在只处理几种不同的数据类型时(在这种情况下,三种).