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