C语言讲义——传值、传引用

C语言讲义——传值、传引用

传值

值类型在做参数的时候,函数内使用的是实参的副本。

函数执行完毕后,即使函数内对参数做了修改,调用方的参数还是原来的值。

#include

// 值调用

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

传引用

将地址传入参数,在地址指向的内存空间中修改具体的值,则调用方亦可取也。

#include

// “值调用”

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

// 返回值:最大值

// 返回参数:最小值

int max_min(int a[], int len, int *min) {

int nMax = a[0];

int nMin = a[0];

for(int i = 0; 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;

}

相关推荐

6 月 30 日足球赛事深度解析:5 场焦点战预测与策略指南(附比分参考)
袁家军走访慰问驻渝部队官兵和优抚对象
365赢多少钱会被限额

袁家军走访慰问驻渝部队官兵和优抚对象

🗓️ 10-13 👁️ 3594
昂达GTX750Ti典范2GD5点评
365bet电子游戏

昂达GTX750Ti典范2GD5点评

🗓️ 08-11 👁️ 4759
乐视网宣布终止乐视影业注入:贾跃亭持股被冻结短期难解决
365赢多少钱会被限额

乐视网宣布终止乐视影业注入:贾跃亭持股被冻结短期难解决

🗓️ 09-26 👁️ 8562
疣是什么症状和图片
365bet电子游戏

疣是什么症状和图片

🗓️ 07-29 👁️ 6627
老家那边一直没有电信4G信号怎么处理?
BT365软件提现不了

老家那边一直没有电信4G信号怎么处理?

🗓️ 10-10 👁️ 3187