C语言可变参数用法,C语言可变参数
c语言变量参数,参数传递-尤里卡_-博客公园
c语言变量参数,参数传递1。功能参数的存储。函数参数存储在函数的堆栈中。
示例:
#包含stdio.h
void fun(int a0,int a1,int a2,int a3)
int * temp
temp=a0
int I;
for(I=0;I 4;i ){
printf(%d\t ,* temp);
int main(){
fun(1,2,3,4);
getchar();
返回0;
}函数输出为:
1 2 3 4
2.通用函数的定义存储在内存中。
在通用变量定义之后,相同的变量类型被存储在相邻的内存块中。
示例:
#包含stdio.h
int main()
int A0=1;
char c0= a
double d0=1.1
char c1= b
双d1=2.2
int a1=2;
int a2=3;
int * pint=a0
char * pch=c0
double * pd=d0
printf(%p:%d\n ,品脱,*品脱);
品脱;
printf(%p:%d\n ,品脱,*品脱);
品脱;
printf(%p:%d\t%p\n ,pint,* pint);
printf(%p:%c\n ,pch,* PCH);
pch
printf(%p:%c\n ,pch,* PCH);
printf(%p:%.2f\n ,pd,* PD);
PD;
printf(%p:%.2f\n ,pd,* PD);
}输出:
0xbf944c54:1
0xbf944c58:2
0xbf944c5c:3
0xbf944c6e:a
0xbf944c6f:b
0xbf944c40:1.10
0xbf944c48:2.20
* *这个结论只是我自己编译的结果,可能和另一个编译器的输出不一样。而且,如果有任何变量没有被使用,编译器可能会将其丢弃(这只是我的猜测,我前阵子研究《深入理解计算机系统》的时候也在研究这个问题)。
3.C语言给出的可变形引用va_list头文件stdarg.h
定义了以下四个宏:
1.va_list在stdarg.h: typedef char * va_list中定义;
2.void va_start(va_list ap,last);这是第一个被调用的宏,last是变量参数的前一个确定参数。所以只允许有可变参数的函数,比如fun(.)是违法的。
# define va _ start (ap,v)(AP=(va _ list)v _ int sizeof(v))//第一个可选参数的地址
3.void va_arg(va_list ap,type);返回当前参数并将ap指向下一个参数。type是一个显式类型名,它是获取的类型,而不是。
# defineva _ arg (ap,t)(*(t *)((AP=_ int sizeof(t))-_ int sizeof(t)))//下一个参数地址
4.void va _ end(va _ list AP);有va_start就必须有va_end,用来释放ap。
# define va _ end(AP)(AP=(va _ list)0)//将指针设置为无效
4.void va_copy(va_list dest,va _ list src);每次调用va_copy都要有一个va_end调用。
示例:
#包含stdio.h
#包含stdarg.h
虚空乐趣(int a,){
va _ list ap
va_start(ap,a);
int I;
for(I=0;i i ){
printf(%d\t ,va_arg(ap,int));
putchar( \ n );
va _ end(AP);
int main(){
fun(4,1,2,3,4);
printf(-\ n );
fun(4,1,2, ab , CD );
返回0;
}输出:
1 2 3 4
-
1 2 134514184 134514181
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。