C语言关于指针函数可变参数的使用方法和打印相应数据

发布时间:2024年01月15日

?通过使用四个函数来实现 指针函数的可变参数操作;

四个函数分别为:

#include <stdarg.h>

va_list ap;          //初始化 参数列表指针
va_start(ap, count); //将ap指针指向第一个参数COUNT 这个是必须存在的 否则无法定位到后面的参数
va_arg(ap, int);     //这个是按顺序读取写入的参数 每运行一次只能读取一个 不用的数据,需要用不同的 
                     //类型去接受  我试验过的有 char* int double 这些都可以读取出来  
va_end(ap);          //释放ap指针的内容 防止函数运行结束后内存泄漏;                    

?下面是我的测试程序:

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

void my_sum(int count, ...);


void (*funtion)(int count, ...);

void  add(int count, ...) {

	va_list ap;
	int a;
	int b;
	int sum = 0;
	int i = 0;
	//sum += va_arg(ap, int);
	va_start(ap, count);//用于标记这个COUNT的地址 为寻找后面的参数提供解决办法

	printf("%d \n", va_arg(ap, int));
	printf("%d \n", va_arg(ap, int));
	printf("%f \n", va_arg(ap, double)); // float 不可行   原因 : 未知
	printf("%s \n", va_arg(ap, char *));
	printf("%c \n", (char)va_arg(ap, int));
	// 这个 我也有一点不理解 为什么va_arg(ap, char)  不能够输出
	// 我的理解是 va_arg(ap, int) 是一个整型 然后将其变为Char型就可以输出一个R
	// 我计划尝试一下float
	printf("%f \n", (float)va_arg(ap, double)); //这个可以正常输出 但是我还是不清楚为什么 只能是 DOUBLE   !-0-!

	va_end(ap);



}

int main() {
	funtion = add;
	(*funtion)(3, 15, 15, 2.555555, "asdfghjkl", 'R', 2.5);

	return 0;
}

void my_sum(int count, ...) {
	//将要用来存放需要的某个可变参数的指针的信息
	va_list ap;
	char *prompt;
	int sum = 0;

	//开始的初始化,其中ap含有指向可变参数的指针的信息,count是当前函数中最后一个非可变的参数(这样才能定位).
	va_start(ap, count);

	//获取并返回下一个可变参数的值,第一个参数是ap不用说了,第二个参数是要获取的参数的类型。
	//根据文档,如果类型指定错误了,或者没有下一个可变参数了,那么返回的结果是随机的。
	prompt = va_arg(ap, char *);
	printf("%s\n", prompt);

	int i;
	for (i = 0; i < count; ++i) {
		sum += va_arg(ap, int);
	}

	//使用完可变参数之后要用这个来释放资源
	va_end(ap);
	printf("%d\n", sum);

}

测试结果:

文章来源:https://blog.csdn.net/qq_42584266/article/details/135530653
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。