C语言讲义——传值、传引用 心已赠人 2021-11-11 12:52 287阅读 0赞 # 传值 # ![1648799-20190715211603885-545206847.png][] 值类型在做参数的时候,函数内使用的是实参的**副本**。 函数执行完毕后,即使函数内对参数做了修改,调用方的参数还是原来的值。 #include <stdio.h> // 值调用 void swap_value(int x, int y) { int temp = x; x = y; y = temp; } main() { int x = 0; int y = 1; printf("x = %d, y = %d\n", x, y); swap_value(x, y); printf("传值调用后:x = %d, y = %d\n", x, y); } 运行结果: x = 0, y = 1 传值调用后:x = 0, y = 1 # 传引用 # ![1648799-20190715211618774-1273157867.png][] 将地址传入参数,在地址指向的内存空间中修改具体的值,则调用方亦可取也。 #include <stdio.h> // “值调用” void swap_value(int x, int y) { int temp = x; x = y; y = temp; } // “引用调用1”,形参:传的是地址,取得是值(*) void swap_p(int* x, int* y) { int temp = *x; *x = *y; *y = temp; } // “引用调用2”,形参:传的是值,接的是地址 void swap_addr(int &a, int &b) { int temp = a; a = b; b = temp; } main() { int x = 0; int y = 1; printf("x = %d, y = %d\n", x, y); swap_value(x, y); printf("传值调用后:x = %d, y = %d\n", x, y); swap_p(&x, &y); printf("传地址调用后:x = %d, y = %d\n", x, y); swap_addr(x, y); printf("传值接地址调用后:x = %d, y = %d\n", x, y); } 运行结果: x = 0, y = 1 传值调用后:x = 0, y = 1 传地址调用后:x = 1, y = 0 传值接地址调用后:x = 0, y = 1 ←(0,1)换成(1,0);这一步又还回来(0,1) ### 练习:返回值,返回参数 ### 定义一个函数,要求能够同时得到一个整型数组的最大值和最小值。 #include <stdio.h> // 返回值:最大值 // 返回参数:最小值 int max_min(int a[], int len, int *min) { int nMax = a[0]; int nMin = a[0]; for(int i = 0; i<len ; i++) { if (nMax < a[i]) { nMax = a[i]; } if (nMin > a[i]) { nMin = a[i]; } } *min = nMin; return nMax; } int main(int argc, char *argv[]) { int a[]= {1,2,5,9,7}; int len = sizeof(a)/sizeof(int); int nMax_main; int nMin_main; nMax_main = max_min(a, len, &nMin_main); printf("Main : Max = %d, Min = %d\n", nMax_main, nMin_main); return 0; } 转载于:https://www.cnblogs.com/tigerlion/p/11191589.html [1648799-20190715211603885-545206847.png]: /images/20211109/a710dc01a5b2434bb5dcfbcb333a32f9.png [1648799-20190715211618774-1273157867.png]: /images/20211109/2a0825394bcc46f894c9b4eb59d3b49e.png
还没有评论,来说两句吧...