数值的交换

说到数值传递,首先要澄清一个问题:
是参与形参的关系:

  1. 个数相同
  2. 按位置关系对应
  3. 类型一致
  4. 值传递(将是参变量的值复制一份,赋给形参变量)
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所指向的空间,
所以交换后 值会改变

这个程序需要注意的问题:

  1. exchange()函数的形参实参必须为地址
  2. 且在交换时也交换的是地址( temp=*a; *a=*b; *b=temp;)
全部评论

相关推荐

头像
11-07 01:12
重庆大学 Java
精致的小松鼠人狠话不多:签哪了哥
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务