扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
C语言整型、实型数据,如果以变量名称作为参数,系统规定的处理方式就是:实际参数仅决定形式参数的初值,形式参数在子函数内部的操作与实际参数无关。
成都网站建设、网站建设介绍好的网站是理念、设计和技术的结合。创新互联拥有的网站设计理念、多方位的设计风格、经验丰富的设计团队。提供PC端+手机端网站建设,用营销思维进行网站设计、采用先进技术开源代码、注重用户体验与SEO基础,将技术与创意整合到网站之中,以契合客户的方式做到创意性的视觉化效果。
如果需要子函数内的操作能够影响实际参数的内容,需要使用实际参数变量的地址做参数,使得子函数内部对于形式参数的操作能够直接在实际参数的存储空间内进行。你的子函数定义应该修改为:
int
max(int
*a,int
*b)
{
int
c;
if(*a*b)
{
c=*a;
*a=*b;
*b=c;
}
}
函数的调用格式应该为:
max(m,i);
使用实参地址作为参数,与子函数指针类型的形式参数对应。
达到在子函数中通过实际参数地址,直接操作实际参数变量内容的目的。
C语言中定义了va_list, va_start( ), va_arg( ), va_end( ) 这样一组宏来处理可变参数问题。
可以参考printf的声明,创建自己的实现函数。示例:
#includestdio.h
#includestdarg.h
void va_fun(int start,...)
{
va_list arg_ptr;
int nArgValue = start;
int nArgCount = 1;
va_start(arg_ptr,start);
while(nArgValue != -1)
{
printf("arg %d is:%d/n",nArgCount,nArgValue);
nArgValue=va_arg(arg_ptr,int);
++nArgCount;
}
return;
}
main()
{
va_fun(5,1,7,-1);
printf("................/n");
va_fun(2,4,-1);
printf("................/n");
va_fun(-1);
printf("................/n");
//va_fun(); 可变参数函数最少要有一个参数。
}
亲,const char* arg已经让这个arg字符串的内容无法改变了(arg指向的地址空间内存的内容不允许改变)。
比如你试图arg[0]='H'; 编译就会失败。因为const char *的意义是字串内容无法改变。但是,s如果是另一个字符串,则arg=s可以编译通过。即,让arg指向另一块不同的地址(另一个不同的字符串)。
如果我没有猜错,你和char * const arg混了。char * const arg的意思是,字串的内容可以改变(arg指向的地址上存的内容可以改变),但是,arg指向的地址不能变。假设s是另一个string,arg=s就无法编译通过。
const char* const arg的意思就是,arg指向的地址不能换,arg指向的地址里面的内容不能改,就是上面两个提到的不可写特性的统合,即arg=s和arg[0]='H'都无法编译通过
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流