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)
我感谢您的帮助.
根据设计,C不允许单个函数为每个参数接受多于一种类型.但是,有很多方法可以在C语言中执行相同的操作:
首先,您可以编写多个不同的函数来执行相同的操作,但是在不同的类型上.例如,代替add你可以有三个名为的函数add_int,add_char和add_float.在大多数情况下,我建议这样做,因为它是迄今为止最简单且最不容易出错的.
其次,您可能已经注意到如何printf打印字符串和数字?所谓的可变参数函数,printf可以使用不同类型的参数,但在这种情况下printf,您仍必须在格式字符串中指定所需的参数类型.
最后,void如果需要使用对象占用的内存,则可以使用指针,而不管其类型如何.函数喜欢memcpy并memset执行此操作,例如将一个对象的内容直接复制到另一个对象.这有点难以正确管理,因为它很容易出错并最终破坏内存,但它仍然可行(有时甚至是最好的选择).
但是如果你是C语言的初学者,正如你所陈述的那样,第一个选项可能是最简单的选择,特别是在只处理几种不同的数据类型时(在这种情况下,三种).