精华内容
下载资源
问答
  • 2020-02-22 20:55:58

    形参(形式参数)
    在函数定义中出现的参数可以看做是一个占位符,它没有数据,只能等到函数被调用时接收传递进来的数据,所以称为形式参数,简称形参。实参(实际参数)
    函数被调用时给出的参数包含了实实在在的数据,会被函数内部的代码使用,所以称为实际参数,简称实参。

    形参和实参的功能是传递数据,发生函数调用时,实参的值会传递给形参。
    当形参是引用类型时,对应的实参被引用传递,引用形参是对应的实参的别名。
    形参和实参的区别和联系

    1. 形参变量只有在函数被调用时才会分配内存,调用结束后,立刻释放内存,所以形参变量只有在函数内部有效,不能在函数外部使用。

    2. 实参可以是常量、变量、表达式、函数等,无论实参是何种类型的数据,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参,所以应该提前用赋值、输入等办法使实参获得确定值。

    3. 实参和形参在数量上、类型上、顺序上必须严格一致,否则会发生“类型不匹配”的错误。当然,如果能够进行自动类型转换,或者进行了强制类型转换,那么实参类型也可以不同于形参类型。

    4. 函数调用中发生的数据传递是单向的,只能把实参的值传递给形参,而不能把形参的值反向地传递给实参;换句话说,一旦完成数据的传递,实参和形参就再也没有瓜葛了,所以,在函数调用过程中,形参的值发生改变并不会影响实参。

    按值传递:在调用函数中将原函数的值拷贝一份过去被调用的函数,在被调用函数中对该值的修改不会影响原函数的值。
    按地址传递:在调用函数的时候将原函数的值所在的地址拷贝一份过去,被调用函数对这个地址所作的修改会影响原来的值。

    1、按值传递

    实参是变量,表达式等值。

    find(int x){} y= find(z);

    上面的例子中,z是实参,x是形参。x变z不变。

    在值传递过程中,实参和形参位于内存中两个不同地址中,实参先自己复制一次拷贝,再把拷贝复制给形参。所以,在值传递过程中,形参的变化不会对实参有任何的影响。

    2、地址传递(也称引用传递)

    实参是指针。

    在函数调用的时候,实参传递给你的是指针地址,地址一样也就意味着实参和形参是一样的,当你的形参发生改变时,实参也会发生改变。

    find(int  &x){}
    y= find(z)

    上面的例子中,z是实参,x是形参。z随x而改变。

    更多相关内容
  • 下面小编就为大家带来一篇老生常谈C++中实参形参的传递问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 关于c语言函数实参形参传递的几种方式总结

    千次阅读 多人点赞 2019-07-28 11:21:54
    关于函数实参形参传递的几种方式下面用简单的打印函数来实现 1.常量传递,实参是常量,形参是变量 #include <stdio.h> #define PI 3 //定义了一个常量PI ,其中值为3 void print(int n); //声明了一个print...

    关于函数实参形参传递的几种方式下面用简单的打印函数来实现

    1.常量传递,实参是常量,形参是变量

    #include <stdio.h>
    #define  PI  3    //定义了一个常量PI ,其中值为3
    void print(int n);   //声明了一个print函数,方便调用
    int main(void)
    {
        print(PI);   // 将常量PI的值(实参)传递给函数(形参)
        return 0;
    }
    void print(int n)  //定义了一个print函数,用来打印形参值
    {
        printf("%d\n",n);
    }
    

    2.变量传递,实参是变量,形参是变量

    #include <stdio.h>
    void print(int n);   //声明了一个print函数
    int main(void)
    {
        int i=10;   // 定义变量i,并赋值给i;
        print(i);   // 将变量i的值(实参)传递给函数(形参)
        return 0;
    }
    void print(int n)  //定义了一个print函数,用来打印形参值
    {
        printf("%d\n",n);
    }
    

    3.地址传递 ,实参是地址,形参也是地址

    #include <stdio.h>
    void print(int *point);   //声明了一个print函数
    int main(void)
    {
        int i=10;   // 定义变量i,并赋值给i;
        print(&i);   // 将变量i的地址的值(实参)传递给函数(形参)(指针)
        return 0;
    }
    void print(int *point)  //定义了一个print函数,指针作为
                            //形参实现地址传递,然后将其指向的地址里的值用来打印
    {
        printf("%d\n",*point);
    }
    

    4.指针指针传递,实参是指针,形参是指针

    #include <stdio.h>
    void print(int *point);   //声明了一个print函数
    int main(void)
    {
        int i=10;   // 定义变量i,并赋值给i;
        int *sp=&i;   //将变量i的地址赋值给指针sp
        print(sp);   // 将指针sp的指向(实参)传递给函数(形参)形参指针(也指向i变量地址)
        return 0;
    }
    void print(int *point)  //定义了一个print函数,指针作为
                            //形参实现地址传递,然后将其指向的地址里的值用来打印
    {
        printf("%d\n",*point);
    }
    

    5.指针地址传递,实参是指针,形参是地址

    #include <stdio.h>
    void print(int *point);   //声明了一个print函数
    int main(void)
    {
        int i[5]={10,4,53,23,534};   // 定义变量i,并赋值给i;
        int *sp=i;    //定义指针sp,并指向i数组首地址
        print(sp);   // 将指针(实参)传递给函数(形参)形
        return 0;
    }
    void print(int arry[])  //定义print函数,数组作为形参,指针指向数组首地址
    {   int i;
        for(i=0;i<5;i++)
        {
            printf("%d\n",arry[i]);
    
        }
    }
    

    6.地址指针传递,实参是地址,形参是指针

    #include <stdio.h>
    void print(int *point);   //声明了一个print函数
    int main(void)
    {
        int i[5]={10,4,53,23,534};   // 定义变量i,并赋值给i;
        print(i);   // 将数组的首地址(实参)传递给函数(形参)形参指针使其指向数组首地址
        return 0;
    }
    void print(int *point)  //定义print函数,指针作为形参实现地址传递
                         //将其指向的地址里的值用来打印,然后指向自增
    {   
        int i;
        for(i=0;i<5;i++)
        {
        printf("%d\n",*point);
        point++;
        }
    }
    

    7.数组元素变量传递,实参是数组元素,形参是变量

    #include <stdio.h>
    void print(int n);   //声明了一个print函数
    int main(void)
    {
        int i[5]={10,9,78,3,6};   // 定义数组i,有5个元素,并赋予初值;
        print(i[4]);   // 将数组元素i[4]的值(实参)传递给函数(形参)
        return 0;
    }
    void print(int n)  //定义了一个print函数,用来打印形参值
    {
        printf("%d\n",n);
    }
    

    8.变量数组元素传递,实参是变量,形参是数组元素

    #include <stdio.h>
    void print(int n[]);   //声明了一个print函数
    int main(void)
    {
        int i=10;   // 定义变量i,赋予初值10;
        print(i);   // 将变量i的值(实参)传递给函数(形参)数组元素a[5];
        return 0;
    }
    void print(int n[5])  //定义了一个print函数,用来打印形参值n[5]
    {
        printf("%d\n",n[5]);
    }
    

    纯粹个人总结,如有不认同,勿喷,

    展开全文
  • C++ 实参形参

    2021-06-03 03:21:44
    C++语言复制构造函数 #include <iostream> using namespace std; class A { public: A() {}; A(const A& a); }; A::A(const A& a) { cout <<... //此时实参复制给形参,间接发

    C++语言复制构造函数

    #include <iostream>
    using namespace std;
    class A {
    public:
        A() {};
        A(const A& a);
    };
    A::A(const A& a) {
        cout << "复制构造调用" << endl;
    };
    void func(A a) {
    
    }
    int main()
    {
        A a;
        func(a);    //此时实参复制给形参,间接发生 A a(a)的调用 因此复制构造会被调用
        return 0;
    }
    

    以上代码中,复制构造函数会被调用。

    此外 const A& a如何理解? 实际上也发生了实参形参转化,为 A &a = a。相当于形参为一个引用,在这一步引用绑定了传入的实参a。

    展开全文
  • C语言中函数传递(实参 形参

    千次阅读 2018-06-05 16:12:45
    形参:在被调函数形参表中的变量名、数组名,该过程在被调用前,没有为它们分配...传递参数时,形参实参是按位置结合的,形参表和实参表中对应的变量名可以不必相同,但它们的数据类型、参数个数及位置必须一一对应
    形参:在被调函数形参表中的变量名、数组名,该过程在被调用前,没有为它们分配内存,其作用是说明自变量的类型和形态以及在过程中的作用。 

    形参可以是 合法变量名,数组名

    实参:从主调过程传递给被调用过程的参数值。实参可以是变量名、数组名、常数或表达式。在过程调用 
    传递参数时,形参与实参是按位置结合的,形参表和实参表中对应的变量名可以不必相同,但它们的数据类型、参数个数及位置必须一一对应 
    两者关系: 
    1. 形参只能是变量,实参可以是常量、变量或表达式。在被定义的函数中,必须指定形参的类型。 
    2. 实参与形参的个数应一样,类型应一致。字符型和整型可以互相通用。 
    3. 在调用函数时,如果实参是数组名,则传递给形参的是数组的首地址 
    4.实参传递给形参是单向传递,形参变量在未出现函数调用时,并不占用内存,只在调用时才占用。调用结束后,将释放内存。执行一个被调用函数时,形参的值如果发生改变,并不会改变主调函数中的实参的值。 
    5.形参如同公式中的符号,实参就是符号具体的值,在调用过程前必须得到赋值;调用过程就是实现形参与实参的结合,把实参的值通过调用传递给形参,相当于把值代入公式进行计算。

    C语言中在发生有参函数调用时,实参变量与形参变量之间的数据都是单向的“值传递”方式。包括指针变量和数组名作参数的情况。 
    C语言要求函数的实参要有确定的值,在函数调用时给形参分配相应的内存单元,同时将实参的“值”赋(复制)给形参,实现数据从实参到形参的传递(‘值传递’方式)。因为是复制,所以在操作副本(形参)过程中不会影响到原本(实参)内容。 
    首先,作为函数实参的量包括常量、变量和表达式。其中变量又包括简单变量、数组元素、数组名、指针变量等。不同类型变量作参数实现的数据传递方式相同,效果不同。所谓方式相同即都是参数间数据单向的“值传递”,效果不同是指被调函数能否改变主调函数中变量的值。

    情况一:简单变量或数组元素作为函数参数 
    数组元素本身属于简单变量,在向形参传递数据时,根据前述规则只需将变量中的“值”复制一份放到形参变量中去操作,此时在被调用函数中操作的对象(形参)与实参并不在同一内存单元,并且在调用结束后形参所占内存单元被释放,因此调用函数不会影响到实参变量的值。同时被调函数也不会影响到主调函数中其他变量的值。

    例:1

    void main() 

    int a=1, 
    f(int a); 
    printf(“%d%d”,a,f(a)); 

    f(int a) 

    return(++a); 

    例2

    void main() 

    int a[3]={1,2,3}; 
    f(int a); 
    printf(“%d%d”,a[0],f(a[0])); 

    f(int a) 

    return(++a); 
    }

    情况二:指针变量或数组名作为函数参数 
    1.指针变量作函数参数 
    指针变量作实参在调用时仍然符合前述“值传递”规则,将其“值”赋给形参,相当于复制。此时数据在实参与形参间传递仍是单向的,调用函数不会影响实参的“值”(即指针变量中所存地址)。而与简单变量不同的是指针变量复制给形参的“值”本身是一个地址,这个地址为形参访问其所指变量创造了可靠条件。我的理解是,实参是一个抽屉的钥匙,在传参时,实参复制了一把钥匙传给形参。而被调函数拿到钥匙副本后,进行的操作可以分为两类:1、对钥匙本身做了一些操作(对指针本身进行操作);2、通过钥匙对抽屉里的内容进行了一些操作( 对指针所指的变量进行操作);两种操作都不可能影响实参的值(即钥匙原本),却有可能改变实参所指向变量的值(即抽屉里的内容)。 
    例1

    void main() 

    void swap(int*p1,int*p2); 
    int a,b; 
    int *pointer1,int*pointer2; 
    scanf(“%d,%d”,&a,&b); 
    pointer1=&a; pointer2=&b; 
    if(a



    展开全文
  • 实参形参是什么?区别?

    千次阅读 2020-07-14 11:12:54
    double cube(double x) { return x*x*x; } void main() { double m; ...当main()调用cube()时,将m的值传给cube(),m为实参。...cube()被调用时将创建一个...2.形参用于接收实参值的变量。 3.参数传递的过程:将实参的e值赋
  • C什么叫实参 形参 ?怎么用?区别?
  • python 实参形参

    千次阅读 2020-01-10 14:48:42
    是实际占用内存地址的,而形参只是意义上的一种参数,在定义的时候是不占内存地址的,如在上面例子中,username就是一个形参,尼古拉斯赵四是我在调用函数时传入的一个实参,它的值被存储在形参username中。...
  • 1.案例 值传递的理解,如果形参发生改变,并不会影响实参 2.思路 值传递 观察到函数中交换值后,即形参中交换值,在主函数,即实参并没有交换值。 3.总结 深刻理解后,为后续指针的运用打基础。
  • python 形参实参

    2022-03-03 20:23:05
    def Max(a,b): if a > b: print("a大于b") else: print("b比a大") Max(2, 1) Max(1, 2) ...定义的Max 函数中 (a,b) a和b ...调用函数时,传递的参数称为"实际参数",简称为实参。Max(2,1) 2和1就是实际参数 ...
  • 1.函数定义和调用(以a+b为例) 注意:在定义时要保持类型相同(要求指定的函数类型和return语句的表达式类型一致) ...所以传值的方式,得到的地址是不同的,因此形参只是对实参的临时拷贝,不能修改里
  • 形参实参

    千次阅读 多人点赞 2021-04-18 17:06:52
    形参变量: 形参变量是功能函数里的变量,只有在被...形参实参的内容拷贝一份,在该函数运行结束的时候释放,实参内容不变。 举例一:(形参不能改变实参) 看看下面这段代码中实参形参的位置, 这个过程中实参
  • C语言中实参形参的区别

    千次阅读 多人点赞 2020-11-06 21:42:57
    即实际参数,是在调用时传递给函数的参数,实参可以为常量,变量,表达式,函数等,无论实参为何种类型的量,在进行函数调用的时候都需要有确定的值,以便将这些值传递给形参。所以应当预先用赋值,输入等方法使实参...
  • Python函数中的实参形参

    千次阅读 多人点赞 2019-09-11 20:56:43
    文章目录一、形参实参的概念二、四大参数4.1位置参数4.2默认参数4.3 可变参数4.4 关键字参数 一、形参实参的概念 函数的参数分为形参(形式参数)和实参(实际参数) 形参又分为,位置参数、默认参数、可变...
  • python函数以及实参形参的详细使用

    千次阅读 多人点赞 2019-06-10 22:51:36
    详细讲解python 函数使用,函数的形参实参的传递。包括位置传参、关键字传参等等。
  • python 中的形参实参

    千次阅读 2022-03-13 16:51:28
    python 中的形参实参 基本定义 形参:形式参数,在定义函数时,函数名后面括号中的参数; 实参:实际参数,在调用函数时,函数名后面括号内的参数,也就是将函数的调用者提供给函数的参数成为实际参数。 两种...
  • 实参形参的区别

    千次阅读 多人点赞 2018-07-30 19:38:16
    1、形参变量只有在被调用时才分配内存单元,在调用结束时,就会释放出所分配的内存单元。...4、在一般传值调用的机制中只能把实参传送给形参,因此在函数调用过程中,形参值发生改变,而实参中的...
  • 形参实参是存在一种引用关系的,就好比变量中的引用关系。我们都知道,变量中的引用关系跟它们的值有关。 当值为原始类型时(string,number,boolean,int等等),var a=b是各自引用不同的内存地址的,修改不会影响...
  • C语言中的实参形参

    千次阅读 2018-11-24 21:57:46
    个人理解,如有错误还请指正 实参:传递给被调用函数的值;...2.实参可以是常量、变量、表达式、函数等, 无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值, 以便把这些值传送给形参。...
  • C/C++中的实参形参

    千次阅读 2018-09-08 19:19:08
    函数定义时候写的参数就是形参调用函数,传递进取的参数就是实参。 举个例子吧,假设你定义一个 我要吃糖的函数:void 我要吃糖(string 某种糖)这个就是形参了,因为这里只是个形式,并没有指明是给你什么糖吃,...
  • 形参: 函数需要传递的参数实参:调用函数时传递的参数补充知识:python函数方法实参形参传值时候的隐形‘陷阱'众所周知,在python函数里面参数分为形参实参两种。形参当然了就是形式参数,而实参是我们需要给这...
  • 实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参形参全称为“形式参数”是在定义函数名和函数体的时候使用的参数,目的是...
  • Java形参实参

    2022-04-23 16:40:19
    Java语言中一个方法可以是无参的,也可以是有参的,而参数又分为了形参实参形参:用来接收调用方法时传递的参数,只有在被调用时才分配内存,一旦调用结束,就释放内存空间。因此仅在方法内有效。 实参:在...
  • 字符串char a[]="abc";printf("%s",a);fgets(a,100, stdin) //安全的字符串输入函数printf("%s",a);scanf("%*[^\n]"); //两个scanf清空输入缓存scanf...int 值作为实参 指针作为形参void xchange1(int *n1,int *n2) ...
  • 这个是很简单的,就是平常最常见的,调用函数时,形参被分配空间,同时将实参的数值赋值一份给形参空间 (如果是表达式的话,就计算后再给形参),然后形参的生死改变就不关实参任何事情,他们可不关联 void s...
  • paixu后面数组z未加括号是对的,这就是实参在定义中已经与形参对应了,默认是数组不需要要加,如果加了出现如下报错。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 161,849
精华内容 64,739
关键字:

实参形参

友情链接: MQL4程序员手册.zip