数值的交换
说到数值传递,首先要澄清一个问题:
是参与形参的关系:
- 个数相同
- 按位置关系对应
- 类型一致
- 值传递(将是参变量的值复制一份,赋给形参变量)
void exchange(int a,int b){
int temp;
temp=a;
a=b;
b=temp;
}
void main(){
int num1=2;
int num2=9;
exchange(num1,num2);
printf("%d %d",num1,num2);
}
上面这个程序显然不能进行数值的交换,因为调用exchange()函数的时候,
a,与b都是临时生成的,将num1的值 复制一份给了a,b也一样,然后进行了所谓交换,
但是 在exchange()函数调用结束之后,又会释放空间,所以num1,num2的值从未改变过
void exchange(int* a,int *b){
int* temp;
temp=*a;
*a=*b;
*b=temp;
}
void main(){
int num1=2;
int num2=9;
exchange(&num1,&num2);
printf("%d %d",num1,num2);
}
这个代码中将num1的地址赋值给了a,故a指向了num1,下面做交换时,是将 b所指想空间的值赋值给了a所指向的空间,
所以交换后 值会改变
这个程序需要注意的问题:
- exchange()函数的形参实参必须为地址
- 且在交换时也交换的是地址( temp=*a; *a=*b; *b=temp;)