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

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

例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);
}

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


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

#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);
}

wKioL1YmSqqyE4-yAABbofmkM5Q003.jpg我们可以看出此时传递过去的是地址,所以发生了改变。



你可能感兴趣的:(揭露函数所传递参数的本来面目)