zoukankan      html  css  js  c++  java
  • C语言函数参数传递

    1.值传递

    void swap(int x,int y)
    {
        int temp = x;
        x = y;
        y = temp;
    }
    
    void main()
    {  
        int a = 10, b = 20;
    
        swap(a, b);
    } 

    执行后,并不会交换。

    2.引用传递

    void swap(int &x,int &y)
    {
        int temp = x;
        x = y;
        y = temp;
    }
    
    void main()
    {  
        int a = 10, b = 20;
    
        swap(a, b);
        printf("a=%d
    b=%d
    ", a, b);
    } 

    执行后,发生交换。

    3.指针传递

     
    void swap(int *x,int *y)
    {
        int temp = *x;
        *x = *y;
        *y = temp;
    }
    
    void main()
    {  
        int a = 10, b = 20;
    
    
        swap(&a, &b);
        printf("a=%d
    b=%d
    ", a, b);
    } 

    执行后,发生交换。

    4.数组做参数,传的到底是什么?

      参数传递只有上面三种,但是如果加上数组,就会产生几种新形式。 

      首先,明确数组型变量名本身只是该数组所占存储空间的首地址:

        int a[3] = { 1, 2, 3 };
    
        int *p = a; //等价于下行
        //int *p = &a[0];
    
        printf("%d", *p);    

       》》》典型的数组做参数

    void fun(char s[]){
        for (int i = 0; s[i] != ''; i++)
            printf("%c", s[i]);
    }
    void main()
    {
        char str[] = "Hello World!";
    
        fun(str);
    }

      函数调用时,这里系统不会为形参分配数组存储空间,而是仅仅分配一个存放数组地址(第一个元素地址)的存储空间,此后,将实参数组的首地址传递给形参变量。其实本质与下相同,只不过还是数组形式的(数组名代替指针)。

      》》》既然数组型变量名本身只是该数组所占存储空间的首地址,我们当然可以用指针做形参来接收数组实参

     
    void fun(char *p){
        while (*p)
        {
            printf("%c", *p);
            p++;
        }    
    }
    void main()
    {
        char str[] = "Hello World!";
    
        fun(str);
    }

      不过问题是如果这样,无法把握数组结束(除非知道数组长度)。而对于字符数组(上例),由于字符串末尾有结束标志''(ascii码正好是0),所以就很容易利用指针来判断字符串是否结束。

  • 相关阅读:
    jquery 遮罩层显示img
    redis 模糊查找keys
    consul windows安装
    redis cluster以及master-slave在windows下环境搭建
    c# 设置和取消文件夹共享及执行Dos命令
    svg教程
    mybatis高级查询
    css常用技巧1
    ssm搭建,maven,javaConfig
    MyBatis整体架构
  • 原文地址:https://www.cnblogs.com/qwer112/p/8471051.html
Copyright © 2011-2022 走看看