传递函数时的会发生参数拷贝,新建地址,但是数组是除外的。
例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