之前写的之间变量实现两个值的交换,用在函数上却没有达到预期效果。下面的三种形式进行分析说明。
1、没有交换值,因为在函数调用过程中交换完就释放了,没有传递给实参
- void swap(int a,int b){
- int temp;
- temp = a;
- a = b;
- b = temp;
- }
- int main(int argc, const char *argv[]){
- //定义两个变量并赋值
- int a=3, b=4;
- printf("交换之前的值:a=%d,b=%d\n",a,b);
- swap(a,b);
- printf("交换之后的值:a=%d,b=%d\n", a, b);
- }
复制代码
2、同样也没有达到交换的效果,因为是形参交换的是地址,并没有值交换
- void swap1(int *a,int *b){
- int *temp;
- temp = a;
- a = b;
- b = temp;
- }
- int main(int argc, const char *argv[]){
- //定义两个变量并赋值
- int a=3, b=4;
- printf("交换之前的值:a=%d,b=%d\n",a,b);
- swap1(&a,&b);
- printf("交换之后的值:a=%d,b=%d\n", a, b);
- }
复制代码
3、达到交换效果,通过指针变量指向的是实参的值,来达到交换效果
void swap2(int *a,int *b){
int temp;
temp = *a;
*a = *b;
*b = temp;
}
int main(int argc, const char *argv[]){
//定义两个变量并赋值
int a=3, b=4;
printf("交换之前的值:a=%d,b=%d\n",a,b);
swap2(&a,&b);
printf("交换之后的值:a=%d,b=%d\n", a, b);
} |
|