精华内容
下载资源
问答
  • 2020-09-15 16:53:39

    实参和形参

    实参

    实际参数简称“实参”。在调用有参函数时,函数名后面括号中的参数称为“实际参数”,实参可以是常量、变量或表达式。

    在调用有参函数时,主调函数和被调函数之间有数据传递关系。在主调函数中调用一个函数时,函数名后面括号中的参数称为“实际参数”(简称“实参”)。

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

    数据传递

    在调用函数过程中,系统会把实参的值传递给被调用函数的形参。或者说,形参从实参得到一个值。该值在函数调用期间有效,可以参加该函数中的运算。

    在调用函数过程中发生的实参与形参间的数据传递,常称为“虚实结合”。

    函数调用过程

    1. 函数的形参列于函数声明中,在函数定义的函数体内使用。在未出现函数调用时,形参不占内存中的存储单元;当函数调用时,形参(任何种类的)是一类将被填充的空白或是占位符。
    2. 将实参的值传递给形参。当函数被调用时,实参列在函数名后面的括号里。执行函数调用时,实参被传递给形参。
    3. 在执行函数期间,由于形参已经有值,可以利用其进行相关运算。
    4. 通过return语句将函数值带回到主调函数。
    5. 调用结束,形参单元被释放。实参单元仍保留并维持原值(值传递)。

    形参

    全称为“形式参数”是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传递的参数。

    形参的作用是实现主调函数与被调函数之间的联系,通常将函数所处理的数据,影响函数功能的因素或者函数处理的结果作为形参。

    没有形参的函数在形参表的位置应该写void.main 函数也可以有形参和返回值,其形参也称为命令行参数,由操作系统在启动程序时初始化,其返回值传递给操作系统。

    实参和形参的关系

    1. 形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量。
    2. 实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值。
    3. 实参和形参在数量上,类型上、顺序上应严格一致,否则就会发生类型不匹配的错误。
    4. 在一般传值调用的机制中只能把实参传送给形参,而不能把形参的值反向地传送给实参。因此在函数调用过程中,形参值发生改变,而实参中的值不会变化。而在引用调用的机制当中是将实参引用的地址传递给了形参,所以任何发生在形参上的改变实际上也发生在实参变量上。

    局部变量和全局变量

    局部变量

    局部变量,也称内部变量,是指在一个函数内部或复合语句内部定义的变量。

    局部变量的作用域是定义该变量的函数或定义该变量的复合语句。局部变量的生存期是从函数被调用的时刻算起到函数返回调用处的时刻结束。

    int f1(int a)
    {
    int b,c;
    ……
    }a,b,c作用域
    main()
    {
    int m,n;
    }

    在函数f1内定义了三个变量,a为形参,b,c为一般变量。在f1的范围内a,b,c有效,或者说a,b,c变量的作用域限于f1内。m,n作用域 m,n的作用域限于main函数内。

    局部变量的作用域说明:

    1. 主函数中定义的变量也只能在主函数中使用,不能在其它函数中使用。同时,主函数中也不能使用其它函数中定义的变量。因为主函数也是一个函数,它与其它函数是平行关系。这一点是与其它语言不同的,应予以注意。
    2. 形参变量是属于被调函数的局部变量,实参变量是属于主调函数的局部变量。
    3. 允许在不同的函数中使用相同的变量名,它们代表不同的对象,分配不同的单元,互不干扰,也不会发生混淆。形参和实参的变量名都为n,是完全允许的。
    4. 在复合语句中也可定义变量,其作用域只在复合语句范围内。

    全局变量

    全局变量也称外部变量,它是在函数外部定义的变量。它不属于哪一个函数,而是属于一个源程序文件:其作用域是整个源程序。

    几乎程序中的所有函数都能使用全局变量,客观上全局变量就起到了在函数间传递数据的作用,甚至可以减少形参和实参的数量。当然在享用它的好处时,也要慎重,避免全局变量过多带来的降低函数通用性及存储空间的浪费。

    全局变量说明:

    1. 全局变量从程序运行起即占据内存,在程序整个运行过程中可随时访问,程序退出时释放内存。与之对应的局部变量在进入语句块时获得内存,仅能由语句块内的语句访问,退出语句块时释放内存,不再有效。
    2. 局部变量定义后不会自动初始化,除非程序员指定初值。全局变量在程序员不指定初值的情况下自动初始化为零。
    3. 在同一源文件中,允许全局变量和局部变量同名。在局部变量的作用域内,全局变量不起作用。
    int a,b;
    void f1()
    {
    ……
    }
    float x,y;
    int f2()
    {
    ……
    }
    main()
    {
    ……
    }

    从上例可以看出a、b、x、y 都是在函数外部定义的外部变量,都是全局变量。但x,y定义在函数f1之后,而在f1内又无对x,y的说明,所以它们在f1内无效。a,b定义在源程序最前面,因此在f1,f2及main内不加说明也可使用。

    更多相关内容
  • 形参变量和实参变量

    千次阅读 2020-09-07 12:13:16
    此时,我们把调用func函数时,传递给形参变量的数据称为:实参,如果传递给形参变量的数据是一个变量,我们称该变量为:实参变量。例如: intb = 8; func(b); 此时,定义了变量b,给变量b赋值8数值;然后,...

    假设有func函数的定义如下:

    void func(int a);

    那么,对func函数的调用如下:

    func(8);

    此时,调用func函数的时候,把8这个数据传递给func函数形参列表中定义的变量a,等价于:

    int a = 8;

    就相当于把8这个数值赋值给形参变量a。此时,我们把调用func函数时,传递给形参变量的数据称为:实参,如果传递给形参变量的数据是一个变量,我们称该变量为:实参变量。例如:

    int b = 8;

    func(b);

    此时,定义了变量b,给变量b赋值8数值;然后,调用func函数的时候,把变量b传递给func函数的形参列表,相当于:

    int a = b;

    此时,把变量b赋值给func函数的形参变量a;那么,称变量b为“实参变量”。那么,我们可以知道,在调用函数的时候,把变量传递给函数的形参列表,那么,该变量称为:实参变量,函数的形参列表中定义的变量,称为:形参变量

    如下是一个程序测试例子:

     

    运行结果如下:

     

    可以看到,调用func1(x); 的时候,参数x是一个变量,称为实参变量x;然后,传递给func1()函数的形参变量a。

    同理func2(x, y, z);函数的调用,实参是x, y, z变量,赋给func2()函数的形参变量a, b, c,相当于:

    int a = x;

    int b = y;

    int c = z;

    所以,在func2()函数中,形参变量a, b, c分别得到实参变量 x, y, z的值。

    韦凯峰 Linux C/C++ 程序设计教程,Linux 系统编程,Openwrt 系统开发,微信:13926572996,QQ:1523520001,博客:www.mylinux.vip

    展开全文
  • c语言中形参与实参: 形参 form parameter ...//在函数中,形参就可以当作是一个局部变量。 if ( a>b ) return a; else return b; } 函数调用 int main() { int a=3,b=5 ; printf( "max=%d\n" , max(a,b) )

    c语言中形参与实参:

    形参 form parameter
    实参 real parameter
    出现在函数定义中的参数,就叫形参
    出现在函数调用中的参数,就叫实参
    函数定义:

    
    int max( int a , int b ) //这里的a,b就是形参
    {
    //在函数中,形参就可以当作是一个局部变量。
    if ( a>b ) return a;
    else return b;
    }
    函数调用
    int main()
    {
    int a=3,b=5 ;
    
    printf( "max=%d\n" , max(a,b) ); //这里的a,b就是实参 。
    return 0;
    }
    
    

    C中的函数参数传递是传递变量的数值,因此,这里相当于调用 max(3,5) 而子函数中收到的就会是 3 5这两值,而与ab变量没有关系。

    • 形参定义时编译系统并不为其分配存储空间,也无初始值,只有在函数调用时,临时分配存储空间,接受来自实参的值。函数调用结束,内存空间释放,值消失
    • 实参可以是常量,变量和表达式,但必须在函数调用前有明确的值。
    • 实参与形参必须类型相同且个数相同。

    变量的作用域:

    局部变量:
    在一个函数内部定义的变量或复合语句内定义的变量称为局部变量。任意一个函数都不能访问其他函数中定义的局部变量,因此在不同函数之间可以定义同名 的局部变量,不会发生冲突。

    -主函数中定义的变量,也属于局部变量,其作用范围同样仅限于主函数内。

    -形参也是局部变量

    -编译时,编译系统不为局部变量分配内存单元,而是在程序运行中,当局部变量所在函数被调用时,编译系统才根据需要临时分配内存。调用结束,内存空间释放

    全局变量:
    在所有函数(包括main函数)外定义的变量即为全局变量,全局变量存储在静态存储区中,其作用域是从定义的地方开始到本源文件结束。若定义时不进行初始化,系统将自动赋予其初值,数值型赋予0,字符型赋予’\0’.

    -当一个函数返回多个值时,使用全局变量更为有效

    #define PI 3.14  //宏定义 
    float c,area;  //全局变量
    void f(float r)
    {c=2*PI*r;
    area=PI*pow(r,2);
    }
    main()
    {float r;  //局部变量
    printf("input r:");
    scanf("%f",&r);
    f(r);
    printf("%f,%f",c,area);
    }
    

    -如果在同一个源文件中,全局变量和局部变量同名,则在局部变量的作用范围内,全局变量不起作用

    int a=3,b=5;
    int max(int x,int y)
    {
    int c;
    c=x>y?x:y;  //a>b ? a : b –>若?前结果为真则运算结果为a,反之运算结果为ba>b ? a : b –>若?前结果为真则运算结果为a,反之运算结果为b
    return c;
    }
    main()
    {
    int a=8;  //局部变量和全局变量a同名,因位在main函数中,所以使用的是main函数中变量a的值。
    printf("%d",max(a,b));
    }
    

    -全局变量在函数编译阶段分配内存,在程序的执行阶段不释放,因此全局变量只进行一次初始化,可不赋值

    展开全文
  • 函数形参是C++函数学习中一大重点,经常让初学者头疼,这里我们通过讲解两个实参值互换的例子讲解实参与形参间的关系,并比较普通变量、指针以及引用作形参时的区别,了解地址、名称以及值间的联系,体会指针、引用...
  • 一级指针做形参:首先一定要明白形参和你传递参数的那个实参是两个不同的变量,即使同名也还依然不同。二级指针做形参:二级指针也是传值,但是他指向的地址是个一维指针。
  • 关于c++中形参和全局变量同名的问题简单探究 今天突然想到如果形参和全局变量同名,会如何处理,有如下结果 #include <bits/stdc++.h> #define yes puts("yes"); #define inf 0x3f3f3f3f #define linf 0x3f3f3...

    关于c++中形参和全局变量同名的问题简单探究

    今天突然想到如果形参和全局变量同名,会如何处理,有如下结果

    #include <bits/stdc++.h>
    #define yes puts("yes");
    #define inf 0x3f3f3f3f
    #define linf 0x3f3f3f3f3f3f3f3f
    #define ll long long
    #define ull unsigned long long
    #define debug(x) cout<<"> "<< x<<endl;
    #define endl '\n'
    #define lowbit(x) x&-x
    //#define int long long
    using namespace std;
    typedef pair<int,int> PII;
    const int N =10 + 1e5, mod = 1e9 + 7;
    int n = 10;
    void f(int n){
        
        cout << n << endl;
        n--;
        cout <<"> "<<n<<endl;
        cout <<"? "<<::n<<endl;
    }
    void solve()
    {    
        f(n);
        cout << n<<endl;
    }
    signed main()
    {
        ios::sync_with_stdio();cin.tie();cout.tie();
    
        solve();
    
        return 0;
    }
    

    结果为:

    在这里插入图片描述

    小结:

    c++中全局变量可以和形参同名,在函数内部的变量和全局变量无关,但如果同名,还想要访问同名的全局变量需要用"::"进行访问。

    展开全文
  • 1、形参和实参 1.1 形参的含义及使用 1.2 实参的含义及使用 2、局部变量和全局变量 2.1 变量作用域的概念 2.2 局部变量 2.3 全局变量 2.4 修改全局变量值
  • 1.形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只有在函数内部有效。函数调用结束返回主调函数后则不能再使用该形参变量。 2.实参可以是常量、变量、表达式、函数等...
  • #include <stdio.h> //int main() /*----------------------------------...//为了避免出错,对被调函数的声明最好不要省略形参名 int a[]={12,32,43,56,67,78}; int i; for(i=0;i<6;i++) { printf("%d\t",a[i
  • 必备知识:c语言中的函数调用...函数的一个功能就是传递数值进行运算,那么我们如何利用函数指针变量通过形参变量的值改变实参变量的值呢?首先,让我们先举一个例子。#includeint main(){void func(int a,int ...
  • C语言函数的形参和实参

    千次阅读 2021-05-20 14:41:20
    原标题:C语言函数的形参和实参上一个例程中在进行函数调用的时候,不需要任何参数传递,所以函数定义调用时括号内都是空的,但是更多的时候我们需要在主调函数被调用函数之间传递参数。在调用一个有参数的函数...
  • 函数体内的局部变量又分为普通局部变量和静态局部变量,对于形参和普通局部变量来说,当函数的控制路径经过变量定义语句时创建该对象,当到达定义所在的块末尾时销毁它。我们把只存在于块执行期间的对象称为自动对象...
  • 形参设置可以为数字字符串变量、元组字典等任意类型数据,元组形参是在变量名前加*,字典形参是在变量名前加** 例如:fun(var),fun(*tuple),fun(*list),fun(**dict) 实参接受也可以是任意类型数据,当接收数据为...
  • int n; int &m = n; 在C++中,多了一个C语言没有的引用声明符&,如上,m就是n的引用,简单的说m就是n的...假如在一个函数中动态申请内存空间,用指针用引用作形参会得到不同的结果,如下面的例子:   void fun(int
  • js函数形参形参接收object变量.docx
  • 目录引用变量的说明:引用变量的格式:引用变量作为函数形参的好处 引用变量的说明: 1.引用的作用是给变量起别名,可以当做变量来用.只能在引用初始化的时候给引用变量赋值 2.引用的本质是弱化的指针,因为只能在引用...
  • 当时百思不得其解,后面才发现是函数形参和全全局局变量重名了,导致将传入的数组指针误认为是全局变量数组。 下面我用代码来还原一下当时的情况 #include <stdio.h> #include <string.h> int ar
  • 在这里,同名的局部变量和形参其实是同一个东西,都是在函数的变量对象里的保存的那个变量; 如果变量是引用类型呢? 那么如果变量是个对象的话,就是我们文章一开始提到的题目了,下面我们分析下: ...
  • 一,变量的引用 1.引用是一种新的变量类型,它的作用就是为变量起一个别名 例如: int b; int &a=b; 注:&表示引用声明符,不表示地址 2.声明一个引用类型变量时,必须在定义时进行初始化,及声明它代表哪一...
  • 函数的局部变量、全局变量形参和实参的关系,要涉及到内存中的一些概念: 1、系统堆栈空间 2、系统堆空间 3、代码区数据区 堆栈的大致概念特点: 堆栈在OS中的作用(在函数调用关系中的作用): main( )...
  • 局部变量形参和函数体内部定义的变量。 局部静态变量:将局部变量定义为static类型。 三者区别 1.形参是一种自动对象,是由传递函数的实参进行初始化,作用域仅仅是在所在函数体内有用,,函数终止,则形参也被...
  • 普通变量是直接传值 指针变量传递地址引用变量是隐式传地址,如void f(int &x),实际传递的是x的地址p,但是函数内部使用x时会自动变成*p void f(int &x) {x++}; 会变成 void f(int *p) {(*p)++}; ...
  • 如果想要精通学习C语言是比较困难的,除了在平时需要多思考之外,还需要在平时做好日常总结,在学习C语言的时候,有两种不同的参数,一种是形参,一种是实参,二者的作用范围是不同的,形参和实参是有很大区别的,...
  • //此处 va成员变量可以被修饰符修饰如(public ,static....) temp(int a){//a为temp的形参形参用来接受实参中传过来的值 //此处temp为构造方法,构造方法名拥有与类名一样的名称此处temp等于class类中的...
  • 02.静态变量 形参

    2018-11-16 15:32:44
    形参的本质是一个名字,不占用内存空间,不是实际存在变量,是没有初值的,只有当执行函数的时候,实参才会将赋值给形参形参的值是根据实参的值而定的,而static型变量在编译时赋初值,即只赋初值一次,且占用内存...
  • Java——形参和实参的区别

    千次阅读 2021-02-12 10:03:14
    形参出现在函数定义中,在整个函数体内都可以使用,...1.形参变量只有在被调用时才分配内存单元,在调用结束时, 即刻释放所分配的内存单元。因此,形参只有在函数内部有效。 函数调用结束返回主调函数后则不能再...
  • const形参和实参

    2021-05-22 01:39:30
    形参是const时,必须要注意关于顶层const的讨论。如前所述,顶层const的作用于对象本身:const int ci=42; //不能改变ci,const是顶层的int i=ci; //正确:当拷贝ci时,忽略了它的顶层constint *const p=&i; ...
  • C语言之形参和实参详解

    千次阅读 2021-05-21 16:06:52
    形参与实参1).定义形参:形式参数。就是定义函数的时候,写在函数名小括号后面的参数叫...实参给形参传值,其实只是相当于给函数的形参(局部变量)赋值c.值传递:在函数内改变了形参的值,不会影响到外面的实参d...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 256,052
精华内容 102,420
关键字:

形参和形参变量