c语言可变形参

这篇具有很好参考价值的文章主要介绍了c语言可变形参。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一般的函数的参数列表都是固定的,但是偶尔也会想要根据情况使用动态的列表。

1.可变形参的形式

返回类型 函数名(第一个参数, ...);

可变形参的函数如上,需要提供第一个参数,后面用...

2.函数用到的特殊东西

va_list是一种特殊的指针,在使用可变形参之前,需要定义它。
va_start是用来初始化va_list ,使之指向列表开头
va_arg,用来取得列表上的值,它的参数有两个,一个是va_list指针,另一个是列表参数类型  
取得当前的列表数据之后,它会让指针移动指向下一个目标            
va_end,收尾工作

3.程序举例

将多个字符串合并在一起

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>


char* Strcat(char* first,...){
	if(first == NULL)
		return NULL;
	
	va_list val;//指向列表的第一位
	va_start(val, first);//使val指向first
	
	char* p = NULL;
	int len = strlen(first);
	while((p = va_arg(val, char*)) != NULL){
		len += strlen(p);
	} 
	printf("%d\n",len);
	va_end(val);
	//分配空间
	p = (char*)malloc(len + 1);
	char *pb = NULL;
	strcpy(p, first);
	//开始复制字符串
	va_start(val, first);
	while((pb = va_arg(val, char*)) != NULL)
	{
		strcat(p, pb);
	} 
	 
	va_end(val);
	return p;
}

 
int main(int argc, char *argv[]) {
	
	char* p = Strcat("hello", ", ", "wo", "rld", (char*)NULL);
	printf("%s\n", p);
	free(p);
	return 0;
}


4.拓展

当然,以上的例子不足以说明问题,仅仅是展示了使用方法。实际上,第一个参数很重要,它可以指明后面参数的类型或者其他信息,有很高的灵活性。,比如printf函数。有兴趣可以深入了解。文章来源地址https://www.toymoban.com/news/detail-552083.html

到了这里,关于c语言可变形参的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 为什么说 Go 语言字符串是不可变的?

    原文链接: 为什么说 Go 语言字符串是不可变的? 最近有读者留言说,平时在写代码的过程中,是会对字符串进行修改的,但网上都说 Go 语言字符串是不可变的,这是为什么呢? 这个问题本身并不困难,但对于新手来说确实容易产生困惑,今天就来回答一下。 首先来看看它

    2024年02月07日
    浏览(55)
  • 【Golang】Golang进阶系列教程--为什么说 Go 语言字符串是不可变的?

    最近有读者留言说,平时在写代码的过程中,是会对字符串进行修改的,但网上都说 Go 语言字符串是不可变的,这是为什么呢? 这个问题本身并不困难,但对于新手来说确实容易产生困惑,今天就来回答一下。 首先来看看它的底层结构: 和切片的结构很像,只不过少了一个

    2024年02月14日
    浏览(64)
  • 全面理解C++函数最难理解的部分:数组形参,函数指针,以及函数指针作为形参

    我提到的这些部分,是我在自学C与C++中遇到的比较困难的点。因为初学者的编程,不太容易使用到这些点,所以很容易造成遗忘,并且自己写很容易出错。 最近在看标准C库的源码的时候遇到了这样的困惑,就是关于函数指针,或者说,把一个函数作为另一个函数的参数的这

    2024年02月07日
    浏览(39)
  • Python之函数-形参和返回值

    可以有缺省值,定义时,如果没有提供该参数,动用缺省值. 缺省值的定义往后放 5种 1、普通形参:可以有缺省值,2种传实参方式都可以用 2、*args 可变仅位置形参,只能接收按照位置传入的实参,可以接收0个或任意个,没有缺省值 3、**kwargs 可变仅形参,只能接收关

    2024年02月06日
    浏览(45)
  • python中的形参和实参以及参数传递方式

    在编程语言中,函数定义时用的是形参,调用时用的是实参。 形参,全称为\\\"形式参数\\\",不是实际存在的变量,又称虚拟变量。形参是在定义函数名和函数体的时候使用的参数, 目的是用来接收调用该函数时传入的参数 。 实参,全称为\\\"实际参数\\\",是在调用时传递给函数的

    2024年02月02日
    浏览(43)
  • GoogLeNet卷积神经网络输出数据形参分析-笔记

    GoogLeNet卷积神经网络输出数据形参分析-笔记 分析结果为: 输入数据形状:[10, 3, 224, 224] 最后输出结果:linear_0 [10, 1] [1024, 1] [1] 子空间执行逻辑 其中拼接张量情况为: 拼接代码:paddle.concat([p1, p2, p3, p4], axis=1) 如 p1=[10,64,5,6,56] p2=[10,128,56,56] p3=[10,32,56,56] p4=[10,32,56,56] 拼接后结果

    2024年02月14日
    浏览(38)
  • ResNet50卷积神经网络输出数据形参分析-笔记

    ResNet50卷积神经网络输出数据形参分析-笔记 ResNet50包含多个模块,其中第2到第5个模块分别包含3、4、6、3个残差块 50=49个卷积(3+4+6+3)*3+1和一个全连接层 分析结果为: 输入数据形状:[10, 3, 224, 224] 最后输出结果:linear_0 [10, 1] [2048, 1] [1] ResNet50包含多个模块,其中第2到第5个模

    2024年02月14日
    浏览(48)
  • c++中,引用作为形参的使用方法和作用

    当在 C++ 函数中传递参数时,可以使用引用作为形参。引用是 C++ 中的一种特殊数据类型,它允许将变量的别名传递给函数,从而允许函数访问和操作原始变量。在函数参数中使用引用有以下几种用法和用途: 当一个函数需要修改传递进来的变量的值时,可以将变量作为引用

    2024年02月09日
    浏览(41)
  • PTA 6-8 用指针操作数组输入输出元素(指针做形参)

    从键盘输入n(n=10),n代表数组元素个数,对数组进行所有元素的输入输出,输入输出功能在fun函数中实现,主函数不要动,要求用指针法操作数组,不要用下标法。 函数接口定义: 裁判测试程序样例 输入格式: 先输入数组的元素个数,然后从键盘输入元素 输出格式: 输出数

    2024年04月10日
    浏览(38)
  • 【Java探索之旅】方法的概念 定义 执行流程 实参与形参的交互

    🎥 屿小夏 : 个人主页 🔥个人专栏 : Java编程秘籍 🌄 莫道桑榆晚,为霞尚满天! 方法是Java编程中非常重要的概念,它能够帮助我们组织代码、实现代码的重复使用,并使代码更加清晰易懂。本文将介绍方法的概念、定义以及调用执行过程,同时解释实参和形参之间的关

    2024年04月14日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包