zoukankan      html  css  js  c++  java
  • c语言函数是怎么传递参数的

    其实就是把变量或常量复制了一份给函数中的变量,简单说来就是复制的过程。

    有一个很经典的问题:用函数交换两个变量的值。

    int a=1;

    int b=2;

    swap(a,b)

    有一个函数是这样实现的

    voidswap(int m,int n)

    {

      int t;

      t=m;m=n;n=t;

    }

    printf("a=%d b=%d",a,b);

    最后输出a和b的值,我们预期a和b的值可能被交换了,但实际上根本没有,是怎么回事呢?

    问题出在函数参数传递,实际上在调用swap(a,b)发生的一个“值复制”过程

    m=a,n=b  //把a的值复制给了m,把b的值复制给了n

    而在swap函数内部是实现了被复制的a和被复制的b的交换,而在函数外部并没有完成原始的a和原始的b的交换

    如果函数参数是指针为什么又可以呢?

    int a=1;

    int b=2;

    swap(&a,&b)

    voidswap(int *m,int *n)

    {

      int t;

      t=*m;*m=*n;*n=t;

    }

    在调用 swap(&a,&b)的时候是一个“地址复制”的过程,具体如下

    m=&a,n=&b//把变量a的地址复制给了m,把变量b的地址复制给了n

    在函数内部

    *m就等于*&a,也就是在函数内部访问到了函数外部的a

    *n就等于*&b也就是b。也就是在函数内部访问到了函数外部的b

  • 相关阅读:
    查看数据库表中的数据
    exec和execsql
    CPI
    百度硬盘可以检索的字节测试
    HDU2095
    Vigenere密码
    斌神无所不能
    HDU p1017
    POJ1316
    head区的代码详解
  • 原文地址:https://www.cnblogs.com/yfish/p/9797596.html
Copyright © 2011-2022 走看看