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


    传值

    值类型在做参数的时候,函数内使用的是实参的副本
    函数执行完毕后,即使函数内对参数做了修改,调用方的参数还是原来的值。

    #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
    ", x, y);
    
    	swap_value(x, y);
    	printf("传值调用后:x = %d, y = %d
    ", x, y);
    }
    

    运行结果:

    x = 0, y = 1
    传值调用后:x = 0, y = 1
    

    传引用

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

    #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
    ", x, y);
    
    	swap_value(x, y);
    	printf("传值调用后:x = %d, y = %d
    ", x, y);
    
    	swap_p(&x, &y);
    	printf("传地址调用后:x = %d, y = %d
    ", x, y);
    
    	swap_addr(x, y);
    	printf("传值接地址调用后:x = %d, y = %d
    ", 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
    ", nMax_main, nMin_main);
    
    	return 0;
    }
    
  • 相关阅读:
    day01
    You need tcl 8.5 or newer in order to run the Redis test
    docker配置网络
    centos设置时间同步
    cacti 添加tomcat监控
    cacti 安装perl 和XML::Simple
    cacti 添加redis监控(远程服务器)
    cacti安装spine 解决WARNING: Result from CMD not valid. Partial Result: U错误
    cacti 添加mysql 监控 (远程服务器)
    centos 安装redis
  • 原文地址:https://www.cnblogs.com/tigerlion/p/11191589.html
Copyright © 2020-2023  润新知