编程:参数类型可变的变参函数,编程:参数类型可变的变参函数 20

2021-01-11 19:09:16 字数 2889 阅读 5340

1楼:爱々勿々醉

我不知道下面已有的那段**是你自己写的还是题目给定的。如果是题目给定的,那么这个题你不用做了。

按照你说的,在参数类型不定的时候,c里面一般都是使用void 类型指针作为参数,然后根据协商好的数据类型进行强制转换。

你这个表述的意思就是函数的第一个参数是一个数组,后面所有的参数,类型不知道,要把这些东西存在数组里面,然后字符串的形式输出。意思很明白,但是你的实现方式显然不可行。

因为你想让函数是多参数的,那么我的建议是:

定义结构体,成员1表示数据类型,成员2表示数据,函数的参数接收的全部是void指针,直接使用结构体进行强制转换,根据读出的类型,再对第二个参数进行强制转换。然后就可以进行相应的操作。

不要试图说,直接对参数进行强制转换,因为不知道参数的类型,很有可能会让程序crash。

c语言如何封装一个带有可变参数的方法?

2楼:匿名用户

需要借用c语言的va_list宏定义,及相关操作来实现可变参数。

va_list所在头文件:#include ,用法如下:

(1)首先在函数里定义一具va_list型的变量,这个变量是指向参数的指针;

(2)然后用va_start宏初始化刚定义的va_list变量;

(3)然后用va_arg返回可变的参数,va_arg的第二个参数是你要返回的参数的类型(如果函数有多个可变参数的,依次调用va_arg获取各个参数);

(4)最后用va_end宏结束可变参数的获取。

以下是一个自定义打印接口的实现:

intmy_printf(constchar*fmt,...)//...表示参数可变

3楼:匿名用户

第一,c里没有方法,只有函数

第二,可以使用vsprintf来代替sprintf

http://baike.baidu.

***/link?url=id6cytxyvttkgstatfti-mrkgmvpwzfq2zqjotakxqlyaoashnkitril_oppcvkwfbvra73ckxhztvzengk-l_

4楼:安藤沙耶香

因为va_start, va_arg, va_end等定义成宏,所以它显得很愚蠢, 可变参数的类型和个数完全在该函数中由程序**控制,它并不能智能地识别不同参数的个数和类型。

有人会问:那么printf中不是实现了智能识别参数吗?那是因为函数printf()是从固定参数format字符串来分析出参数的类型,再调用va_arg的来获取可变参数的。

也就是说,你想实现智能识别可变参数的话是要通过在自己的程序里作判断来实现的。

另外有一个问题,因为编译器对可变参数的函数的原型检查不够严格,对编程查错不利。如果******_va_fun()改为:

如何在一个可变参数函数中调用另一个可变参数函数

5楼:匿名用户

无办法直接做到这一点,不过可以采用其他方法实现,例如:首先,定义被调用函数的参数为va_list类型,同时在调用函数中将可变长参数列表转换为va_list,这样就可以进行变长参数的传递了。看如下所示:

void subfunc (char *fmt, va_list argp)

void mainfunc (char *fmt, ...)这样就ok了!

6楼:性瑞于梦易

只能把va_list解析出来再用,这个函数的功能应该和vsprintf功能一样

下面是个简单的例子

c/c++

code

#include

#include

void

foo(char

*fmt,...)

intmain(void)

这里va_start,va_arg都是预编译,va_list其实是个字符型指针

c语言如何定义一个可变参数函数 如何调用其输入的参数 分别

7楼:匿名用户

有专门的宏,处理可变参

void va_start( va_list arg_ptr, prev_param );

type va_arg( va_list arg_ptr, type );

void va_end( va_list arg_ptr );

一个简单的例子

void******_va_fun(inti,...)intmain()

8楼:圭仁丘妍

传值调用

和引用调用  传值调用和引用调用指的是用于参数传递过程中的一种机制。传值调用中,只使用了实参的值。传值调用机制里,形参是一个局部变量,其初始值为相应实参的值。

在引用调用机制里,将实参的地址传递给形参,从表面上看是以实参变量取代形参,因此任何发生在形参上的改变实际上都发生在实参变量上。

形参的作用是实现主调函数与被调函数之间的联系,通常将函数所处理的数据,影响函数功能的因素或者函数处理的结果作为形参。没有形参的函数在形参表的位置应该写void.main

函数也可以有形参和返回值,其形参也称为命令行参数,由操作系统在启动程序时初始化,其返回值传递给操作系统。

形参和实参的对照实例(c语言版)  main()    ints(intn)

如何判别可变参数函数的参数类型

9楼:

用narginnargin: number of function arguments,即函数输入参数个数。只要你的函数重载逻辑没有出错,那么就可以通过查看nargin的数值来实现你说的设置缺省值等功能。

看下nargin的帮助就知道了。

10楼:新生儿

等闲识得东风面,万紫千红总是春.

如何判别可变参数函数的参数类型,怎么将可变参数的函数的参数传递给另一个可变参数的函数

1楼 用narginnargin number of function arguments,即函数输入参数个数。只要你的函数重载逻辑没有出错,那么就可以通过查看nargin的数值来实现你说的设置缺省值等功能。 看下nargin的帮助就知道了。 2楼 新生儿 等闲识得东风面 万紫千红总是春 怎么将可变...

python函数变量参数怎么使用

1楼 育知同创教育 刚学用python的时候,特别是看一些库的源码时,经常会看到func args kwargs 这样的函数定义,这个 和 让人有点费解。其实只要把函数参数定义搞清楚了,就不难理解了。 先说说函数定义,我们都知道,下面的 定义了一个函数funca def funca pass 显然,...

JS函数中的参数包括另函数,可以吗

1楼 匿名用户 function openx func tx 关键是下面这 句openx function e 参数设置 参数中的e 吗? 0 2楼 匿名用户 arguments可以读到所有传进来的参数function usefunction fun function mefunction n m ...