zoukankan      html  css  js  c++  java
  • C语言形参与实参的概念及swap函数

    形式参数(formal argument)和实际参数(actual argument)是什么?

    void function(int n); //n为形式参数
    int main {   int times=5;   function(times); //times为实际参数 }  
    void function(int n) {   for(int i=0;i<n;i++)   printf("hello "); }

     在声明一个参数时就创建了一个叫形式参数的变量,在上面的例子中形式参数是叫做n的变量。

     函数调用function(times)把times的值5赋给了n,times被称为实际参数,也就是说main()中的变量times的值被复制给了function()中的新变量n。

      

     在形参与实参传递的概念中有个很经典的例子,就是用一个函数交互两个变量的值

     

    #include <stdio.h>
    void swap(int a1, int b1);
    
    int main()
    {
        int a=0,b=1;
        swap(a,b);
        printf("a=%d , b= %d",a,b);
    }
    
    void swap(int a1, int b1)    //无效的交互函数
    {
        int temp=a1;
        a1=b1;
        b1=temp;
    }

       初学的时候很容易写出上面的代码,但是没有达到交换的目的,原因是这里交换的只是函数中形式参数的值,实参只是把它的值复制给了形式参数,当函数作用完成后,函数中的参数也随之销毁了,如例子中想交换main中a,b的值,把它们的值分别复制给了swap函数中的a1,b1,然后在函数中a1和b1的值确实是交换了,但是随之它们就销毁了,main中的a,b的值还是原来的值。

      想要交换a,b的值,其实就是相当于要在函数中改变变量的值,要做到这一点,就需要向形式参数传递实际参数的地址了,因为这样把变量的地址复制到函数中的变量里,它们指向的是内存中的同一个地方,在函数中改变这个地方的值,那么外部的变量的值也就改变了。

      下面的代码可以到达交换目的

      

    #include <stdio.h>
    void swap(int * a1, int * b1);
    
    int main()
    {
        int a=0,b=1;
        swap(&a , &b);  //传递的是实参的地址
        printf("a=%d , b= %d
    ",a,b);
    }
    
    void swap(int * a1, int * b1)   
    {
        int temp = *a1;
        *a1 = *b1;
        *b1 = temp;
    }
  • 相关阅读:
    python cookbook 笔记二
    python cookbook 笔记一
    aircrack-ng笔记
    TeamCity 和 Nexus 的使用
    Linux 搭建 nexus 私服【转】
    maven阿里云镜像
    kali linux 破解wpa密码
    python正则表达式二[转]
    Java并发编程:Synchronized底层优化(偏向锁、轻量级锁)
    集合解析
  • 原文地址:https://www.cnblogs.com/Zhang-Shangyu/p/5274369.html
Copyright © 2011-2022 走看看