大一新生发问:
这个程序中,a和b的值不是交换了嘛,为什么最后结果还是“5-6”?
3条回答 默认 最新
- 技术专家团-小桥流水 2021-12-01 09:04关注
void swap(int a,int b)函数中是传值,传值对main函数中的数据没有影响。
在main函数中调用swap的时候,会发生一次拷贝操作,也就是让把5传递给swap的形参a,6传递给形参6
所以在swap中操作的是两个新的临时变量a和b,而不是main函数中的a和b,只是swap中a的值等于main中变量a的值,swap中b的值等于main中变量b的值,但是,他们的地址时不一样的,swap中的a和b是编译器重新分配的两个地址。所以在swap中对a和b的操作对main中a和b的值没有影响。
在C语言中,可以通过指针的方式实现交换,传递指针的话,操作的是指针指向的数据,虽然也会发生拷贝,但是他们指向同一块内存。C++同样适用。
void swap(int *a,int *b) { int t; t = *a; *a = *b; *b = t; }
在C++中引入了引用的概念,所以,也可以使用引用,如下:
void swap(int &a,int &b) //&在这里是引用的意思 { int t; t = a; a = b; b = t; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 3无用