c语言函数多参数实现 c语言函数参数有什么用( 二 )


main(int argc, char *argv[], char *env[])
{
int i;
printf("%d\n", argc);/* 为什么它的输出是 1, 它到底是定义什么的,我看不明上面的解释*/
for(i=0; i=argc; i++)
printf("argv[%d]:%s\n", i, argv[i]);
for(i=0; env[i]!=NULL; i++)
printf(" env[%d]:%s\n", i, env[i]);
}
argc, argv, env是在main()函数之前被赋值的,编译器生成的可执行文件,main()不是真正的入口点,而是一个标准的函数,这个函数名与具体的操作系统有关 。
就想到其他函数是否能实现一样的功能,查询了相关资料,基本上都是利用STDARG.H中的
#define va_start(ap, parmN) (ap = ...)
#define va_arg(ap, type) (*((type *)(ap))++)
#define va_end(ap)
定义如下:
typedef char *va_list;
#define va_start _crt_va_start
#define va_arg _crt_va_arg
#define va_end _crt_va_end
#define _crt_va_start(ap,v)( ap = (va_list)_ADDRESSOF(v) + _INTSIZEOF(v) )
#define _crt_va_arg(ap,t)( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )
#define _crt_va_end(ap)( ap = (va_list)0 )
修改他人程序如下:
void average(int first,...)
{int i=first;
va_list maker;
va_start(maker,first);
while(i!=-1){ printf("%p: %d\n",maker,i);
i=va_arg(maker,int);
}
}
void main(void)
{
average(2,3,4,4,-1);
}
运行结果:
FFCE: 2
FFD0: 3
FFD2: 4
FFD4: 4
这个程序显示函数参数的地址相差2个字节
所以可以改写为:
void x(char *n,...)
{int *p;
p=n;
while(*p!=-1)
{printf("%p:%s\n",p,*p,*p);
p+=sizeof(char);}}
void main()
{x("g","hfd","gfg","vsds",-1);}
运行结果:
FFD2:g
【c语言函数多参数实现 c语言函数参数有什么用】FFD4:hfd
FFD6:gfg
FFD8:vsds
不必通过宏va_start,va_arg,va_end实现
c语言 , 关于多参数函数的问题如下修改就完美c语言函数多参数实现了c语言函数多参数实现!
#includestdio.h
void SCN(int num[100],int *n,int *m);
void MOVE(int num[100],int n,int m);
void PR(int num[100],int n);
int num[100],n,m;
void main()
{
SCN(num,n,m);
MOVE(num,n,m);
PR(num,n);
}
void SCN(int num[100],int *n,int *m)
{
int i; scanf("%d",n);
for(i=0;i*n;i++){
scanf("%d",num[i]);
}
scanf("%d",m);
}
void MOVE(int num[100],int n,int m)
{
int i,tt;
while(m--){
tt=num[n-1];
for(i=n-1;i0;i--){
num[i]=num[i-1];
}
num[0]=tt;
}
}
void PR(int num[100],int n)
{
int i;
for(i=0;in;i++){
printf("%d",num[i]);
}
}
关于c语言函数多参数实现和c语言函数参数有什么用的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

推荐阅读