明确几个问题:函数只可以返回一个参数;值传递的过程若不用一些特殊符号如static,其生存周期是在函数的局部范围内,即用完函数就消失
为崇明等地区用户提供了全套网页设计制作服务,及崇明网站建设行业解决方案。主营业务为成都做网站、网站设计、外贸营销网站建设、崇明网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!我们都知道在函数调用过程中存在着参数传递的问题。在值传递的过程中,我们只是简单的把数值传递给了参数,这个过程大家可以理解成数学运算中的=,若a=2,b=a,那么b的值的改变肯定是不会影响a的值,这带来了一些问题,比如我们如果想要在函数中交换a和b的值,那么a和b的值只在函数内做了局部交换,以简单的思考方式:我们将a的值给了a1,a1=a,将b的值给了b1,b1=b,在函数内操作,就是改变a1和b1的值,那么与a和b有关系吗,答案是肯定没有的,那怎么能够让a和b扯上关系呢,这里有两种方法,一种是利用&引用符,注意这个是引用符号,不是C语言里的取地址,另一种就是采用指针。
采用引用符&
关于引用符,我理解的是,MAC-10有一个名字叫MAC-10,当然我们还可以给他起一个绰号叫吹风机,那么在RUSHB的时候,我们可以叫队友给我们发一把MAC-10,当然还可以让他给我们发一把吹风机,他都会理解,这个引用符也是如此,a=2,那么我们给他取一个别名 c,让&c=a,这样我们在使用c的时候,a的值也就会跟着变化啦(注意这个操作应该在函数传递或者是定义的时候使用)
#includeint main()
{
int a = 2;
int& c = a;
c = 1;
std::cout<< c<<" "<< a;//结果是1 1
//int a=2,c;
//&c=a;这种方法是错误的,应该在c定义时就让&c=a
}
写交换函数时,
#includevoid swap(int& x, int& y)
{
int t;
t = x;
x = y;
y = t;
return;
}
int main()
{
int a, b;
std::cin >>a >>b;
std::cout<< "the value "<< a<< "and"<< b<< std::endl;
swap(a, b);
std::cout<< "the value "<< a<< "and"<< b<< std::endl;
}
//2 3
//the value 2and3
//the value 3and2
指针作为函数参数
使用指针具体来说之前我们都是直接的传入a和b的值进而来解决问题,利用指针就是“曲线救国”,把a和b的地址作为函数参数传进去,因为每个变量的地址在我们的代码里面是唯一的,因此我们可以从地址找到变量,进而改变他们的值。代码如下:
关于什么时候用&和指针或者值传递
说说我自己的理解,因为在函数传参的过程中,&方式我们可以理解为直接将它本身丢过去,并不会像值传递那样复制出来另一份,因此这种方式本身的速度更快,因为它不进行复制,可以减轻复制大型对象所产生的时间,因此在比如函数功能是遍历一个数组时用&方式或者是指针的方式更好;同时如果函数内我们希望对传入的对象进行数据上的操作,并能够直接辐射到主函数中,使用指针和&方法更好。
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧