标签:传递 src 图片 image span 变量 swa idt printf
函数参数中的值传递:
void my_swap(int m,int n) { int tmp = 0; tmp = m;m = n;n = tmp; printf("m = %d,n = %d\n",m,n) ; } int main() { int a = 11,b = 22; my_swap(a,b); printf("a = %d,b = %d\n",a,b); }
在这段代码中,我想实现的效果是交换a和b的值,即, a = 22,b = 11 ,但是打印结果是 m = 22,n = 11 a = 11,b = 22 ,这是因为在 my_swap() 中参数是以值传递的方式传入的,也就是说, my_swap(a,b); 代表的只是将a的值复制给m,将b的值复制给n,并没有告诉函数变量a和b的地址,所以实际上该函数并没有对变量a和b进行任何操作。
但是如果将函数的参数改为 my_swap(int *m,int *n) ,因为形参是指针所以实参也要相应的进行变换 my_swap(&a,&b); 这样一来函数内部实现就应该变成对指针的操作:
void my_swap(int *m ,int *n) { int tmp = 0; tmp = *m;//将m指向的变量的值赋值给tmp *m = *n;//将n指向的变量的值给了m指向的变量 *n = tmp;//将tmp的值给了n指向的变量 }
这时指针m持有变量a的地址,指针n持有变量b的地址,在函数内部通过指针对变量a和b的值进行了交换,最终打印出来的结果是 a = 22,b = 11 (交换了a和b的值)。
标签:传递 src 图片 image span 变量 swa idt printf
原文地址:https://www.cnblogs.com/haystack/p/12652478.html