现在假设我有一个变长参数函数sum : int sum(int n, ...) 实现n个数的相加,我还有一个函数sumplus : int sumplus(int n, ...); 在第二个函数中我需要这样调用sum : sum(n+3, 1, 2, 3, ...),也就是将函数sumplus的变长参数传给sum,我应该怎么实现呢?
一份错误的代码:
#include <stdio.h>
#include <stdarg.h>
void vprint(int n, va_list vl)
{
int i;
for(i=0; i<n; i++)
printf("%d, ", va_arg(vl, int));
printf("\n");
}
void print(int n, ...)
{
va_list vl;
va_start(vl, n);
vprint(n, vl);
va_end(vl);
}
void print2(int n, int a, ...)
{
va_list vl;
va_start(vl, n);//使用倒数第二个有名变量
vprint(n+1, vl);
va_end(vl);
}
int main()
{
print(3, 1, 2, 3);
print(4, 0, 2, 3, 1);
print2(3, 100, 1, 2, 3);//输出1 2 3 0
return 0;
}
谢谢åç,è·ææ¨æ躺åºä¸æ³çä¸æ ·,ä¸è¿å®é çå½æ°è°ç¨ä¸å¯¹åæ°åäºä¸äºå¤ç,va_listè¿äºå®åºè¯¥æ¯è·å¾å®åå¨æ ä¸çå°å, '...'ç¼è¯å¨æ¯å¦ä½å¤ççè¿ä¸æ¸ æ¥,ä¸è¿åºè¯¥æ²¡æå¾å¥½ç解å³æ¹æ¡äº,大æ¦åªè½éåäºå§
追çä»stdargä¸å®ä¹ç模å¼æ¥çï¼ç¨va_startä»nå¼å§ï¼åºè¯¥æ¯å¯ä»¥å¾å°ä»aå¼å§çåæ°å表ç
ä¸è¿å¨ç¼è¯çæ¶å æçç¼è¯å¨ç»äºä¸ä¸ªwarning
second parameter of 'va_start' not last named argument
ä»è¿ä¸ªä¿¡æ¯ä¸çï¼ç¼è¯å¨å¯¹va_startè°ç¨çæ¶åæ¯åäºæ£æ¥ç
ä»è¿è¡ç»æä¸ç
ç¨va_start(vl, n)åva_start(vl, a)å¾å°çvlå°åæ¯ç¸åç
&n=0xbff54640 &a=0xbff54644 vl=0xbff54648
æ以çæµæ¯ç¼è¯å¨ç»ä¼åäºï¼å³ä¸è®ºva_startç第äºä¸ªåæ°ä¼ è¿å»ä»ä¹ï¼é½æ¯ååçèµ·å§å°å
æ以ææ¹ç¨å¼ºå¿æå
¥çæ¹å¼
æ³ç¥éä½ è¦è¾¾æçæææ¯ä»ä¹ï¼è¿æ ·çæ¹å¼æ¯å¦å¯ä»¥ï¼
æ许ææ´å¥½çæ¹æ³
åºè¯¥æ²¡ä»ä¹åæ³äº,æè¦åçæ¯è¿æ ·çå½æ°funA(int n, ...);
funB(int a, int b, int n, ...)
{
int c = ...
int d = ....
funA(n+2, c, d, ...); //
}
ç´æ¥ä¼ å¯ååæ° ä¼¼ä¹C没æä»ä¹å¾å¥½çå¤çæ¹æ¡
ç¨va_listååæ°ï¼ç¶åä¼ éä¼¼ä¹æ¯ä¸ä¸ªæ¹å¼ï¼ä¸è¿ä¹ä¸è§å¾å¥½
å
¶å®æç
§ä½ è¦æ±çç¨å
¨intä¸å®é¿åº¦åæ°ï¼æ好çæ¹å¼åºè¯¥æ¯ç¨int *å
ä¼ ä¸å®é¿åº¦æ°ç»
容éå¨æåé
ï¼å¹¶å¨ä½¿ç¨åéæ¾
å¯ä»¥ä¼ 两个åæ° int size, int * p
ä¹å¯ä»¥åªä¼ ä¸ä¸ªåæ° int *,æsizeæ¾å¨ç¬¬ä¸ä¸ªå
ç´ ä¸
å½éè¦æ©å
æ¶ï¼éæ°ç³è¯·å
åæè
ç¨realloc
æ¯å¯ååæ´å®¹æç解设计以åç»´æ¤
æè¿æ¯å®æ´å®ç°ä¸ä¸funBå§.代ç ä¹ä¸ç®é¿
好像你没有理解我的意思