首页 > 其他 > 详细

揭露函数所传递参数的本来面目

时间:2015-10-21 00:26:02      阅读:234      评论:0      收藏:0      [点我收藏+]

传递函数时的会发生参数拷贝,新建地址,但是数组是除外的。

例1;把两个数由小到大输出

我们用两种不同的方式来验证我所说的机制。

方式一;直接传。(不会发生交换)



#include<stdio.h>
void change(int a, int b)
{
	int tmp = a;
	a = b;
	b = tmp;
	printf("change:a=%d %p\n,b=%d %p\n", a, &a, b, &b);
}
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d%d", &a, &b);
	if (b>a)
			{
				change(a, b);
			}
	printf("main:a=%d %p\n,b=%d %p\n", a, &a, b, &b);
}

技术分享我们可以看出两个数传递过去后地址发生了变化,在函数中完成了交换但本身并不会发生 变化。


方式二,传地址(会发生交换)

#include<stdio.h>
void change(int *a, int *b)
{
	int tmp = *a;
	*a = *b;
	*b = tmp;
	printf("change:a=%d %p\n,b=%d %p\n", *a, &(*a), *b, &(*b));
}
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d%d", &a, &b);
	if (b>a)
			{
				change(&a, &b);
			}
	printf("main:a=%d %p\n,b=%d %p\n", a, &a, b, &b);
}

技术分享我们可以看出此时传递过去的是地址,所以发生了改变。



本文出自 “痕迹” 博客,请务必保留此出处http://wpfbcr.blog.51cto.com/10696766/1704695

揭露函数所传递参数的本来面目

原文:http://wpfbcr.blog.51cto.com/10696766/1704695

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!