C語言之 可變函數理解練習 va_args

我們用va_arg(ap, type)取出一個參數的時候,關於va_arg中的type: 

https://blog.csdn.net/major2007/article/details/6224515

https://www.cnblogs.com/shiweihappy/p/4246442.html

1. 錯誤代碼 

void fun(int a, ...)
{
	int len, n;
	int arg;
	va_list args;
	va_start(args, a);
	//len = strlen(a);
	arg = va_arg(args, char);
	printf("n=%d, arg = %d\n", n, arg);

	arg = va_arg(args, int);
	printf("n=%d, arg = %d\n", n, arg);

	arg = va_arg(args, int);
	printf("n=%d, arg = %d\n", n, arg);

	arg = va_arg(args, int);
	printf("n=%d, arg = %d\n", n, arg);

	arg = va_arg(args, int);
	printf("n=%d, arg = %d\n", n, arg);

	printf("len=%d,n=%d\n", len, n);
	va_end(args);
}

int main()
{
	int a = 1;
	int b = 2;
	int c = 3;
	int d = 4;
	fun(a, b, c, d);

	return 0;
}

1.1 錯誤結果 

1.2 錯誤原因,可變參數解析的時候,類型必須一致

2. 正確代碼: 

void fun(int a, ...)
{
	int len, n;
	int arg;
	va_list args;
	va_start(args, a);
	//len = strlen(a);
	arg = va_arg(args, int);
	printf("n=%d, arg = %d\n", n, arg);

	arg = va_arg(args, int);
	printf("n=%d, arg = %d\n", n, arg);

	arg = va_arg(args, int);
	printf("n=%d, arg = %d\n", n, arg);

	arg = va_arg(args, int);
	printf("n=%d, arg = %d\n", n, arg);

	arg = va_arg(args, int);
	printf("n=%d, arg = %d\n", n, arg);

	printf("len=%d,n=%d\n", len, n);
	va_end(args);
}

int main()
{
	int a = 1;
	int b = 2;
	int c = 3;
	int d = 4;
	fun(a, b, c, d);

	return 0;
}

2.2 正確結果 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章