• 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),所以就很容易利用指针来判断字符串是否结束。

  • 相关阅读:
    css3 省略号
    js一些常用方法
    nth-child使用
    常见表单元素处理
    表单的基本使用
    web基本概念
    PHP数组
    PHP函数
    PHP错误处理
    PHP文件载入
  • 原文地址:https://www.cnblogs.com/qwer112/p/8471051.html
Copyright © 2020-2023  润新知