首页 > 试题广场 >

以下正确的说法是( ),在C语言中。

[单选题]
以下正确的说法是(        ),在C语言中。
  • 实参和与其对应的形参各占用独立的存储单元
  • 实参和与其对应的形参共占用一个存储单元
  • 只有当实参和与其对应的形象同名时才共占用存储单元
  • 形参是虚拟的,不占用存储单元
1、形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量。
2、实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值。
3、实参和形参在数量上,类型上、顺序上应严格一致,否则就会发生类型不匹配的错误。
4、在一般传值调用的机制中只能把实参传送给形参,而不能把形参的值反向地传送给实参。因此在函数调用过程中,形参值发生改变,而实参中的值不会变化。而在引用调用的机制当中是将实参引用的地址传递给了形参,所以任何发生在形参上的改变实际上也发生在实参变量上。
发表于 2017-08-22 08:43:31 回复(1)
只要明白了值传递和地址传递,就应该能明白形参和实参的具体工作细节了。

1、值传递

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

    find(int x){}

    y= find(z);

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

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

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

   实参是指针。

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

    find(int  &x){}

    y= find(z);

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

3、const引用传递

    find(const int  &x){}

    y= find(z);

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

    有人就会问了,你这样做不是和值传递一样的么?NO!

    仔细观察就会发现,在值传递中要进行两次拷贝,浪费内存资源是相当可耻的,const的出现有效避免了这种情况的出现,只需拷贝一次就够了。


发表于 2018-11-07 11:26:43 回复(1)
形参在编译时是不会分配存储容间,在调用时才在栈里分配
发表于 2017-05-17 22:41:47 回复(0)
1、形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量。 2、实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值。 3、实参和形参在数量上,类型上、顺序上应严格一致,否则就会发生类型不匹配的错误。 4、在一般传值调用的机制中只能把实参传送给形参,而不能把形参的值反向地传送给实参。因此在函数调用过程中,形参值发生改变,而实参中的值不会变化。而在引用调用的机制当中是将实参引用的地址传递给了形参,所以任何发生在形参上的改变实际上也发生在实参变量上。
编辑于 2018-09-03 19:20:51 回复(0)
1、形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量。 2、实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值。 3、实参和形参在数量上,类型上、顺序上应严格一致,否则就会发生类型不匹配的错误。 4、在一般传值调用的机制中只能把实参传送给形参,而不能把形参的值反向地传送给实参。因此在函数调用过程中,形参值发生改变,而实参中的值不会变化。而在引用调用的机制当中是将实参引用的地址传递给了形参,所以任何发生在形参上的改变实际上也发生在实参变量上。
发表于 2021-11-01 11:46:05 回复(0)
形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。
发表于 2019-08-16 15:29:34 回复(0)

传值和引用

发表于 2019-03-17 18:48:56 回复(0)
我一直觉得牛客有BUG,明明选择了我的答案为什么是空
发表于 2017-11-13 19:57:52 回复(2)