呼叫者|空投您需要的C / C ++中的参数传递技术

呼叫者|空投您需要的C / C ++中的参数传递技术

文章图片

呼叫者|空投您需要的C / C ++中的参数传递技术

文章图片

呼叫者|空投您需要的C / C ++中的参数传递技术

参数数据可以通过不同的方法传入和传出方法和函数 。 我们假设从另一个函数A()调用了函数B () 。 在这种情况下 , A被称为“呼叫者功能” , B被称为“被呼叫功能或被调用者功能” 。 同样 , A发送给B的参数称为实际参数 , B的参数称为形式参数 。

术语

  • 形式参数:变量及其在函数或方法原型中出现的类型 。
  • 实际参数:与在调用环境中的函数或方法调用中出现的形式参数相对应的变量或表达式 。
  • 模式:IN:将信息从呼叫者传递到被叫者 。 OUT:被叫方将值写入呼叫者 。 输入/输出:呼叫者告诉被呼叫者变量的值 , 该值可以由被呼叫者更新 。
参数传递的重要方法:
  1. 按值传递:此方法使用模式内语义 。 对形式参数所做的更改不会传输回调用方 。 对被调用函数或方法内的形式参数变量的任何修改仅影响单独的存储位置 , 并且不会反映在调用环境中的实际参数中 。 此方法也称为按值调用 。



输出:在函数中 , a = 12 b = 7总的来说 , x = 5 y = 7
诸如C , C ++ , Java之类的语言都支持这种类型的参数传递 。 实际上 , Java严格按值调用 。
缺点:
  • 存储分配效率低下
  • 对于对象和数组 , 复制语义非常昂贵
2.通过引用传递(别名):此技术使用输入/输出模式语义 。 对形式参数的更改确实会通过参数传递回传给调用者 。 对形式参数的任何更改都会反映在调用环境中的实际参数中 , 因为形式参数会收到对实际数据的引用(或指针) 。 此方法也称为通过引用调用 < em> 。 该方法在时间和空间上都是有效的 。

输出:a是20而b是10
C和C ++都支持按值调用以及按引用调用 , 而Java不支持按引用调用 。
缺点:
  • 可能发生许多潜在的情况
  • 程序有时很难理解
参数传递的其他方法
这些技术较旧 , 并已在Pascal , Algol和Fortran等较早的编程语言中使用 。 这些技术不适用于高级语言 。
  1. 按结果传递:此方法使用输出模式语义 。 就在将控制权传回给调用者之前 , 形式参数的值又传回了实际参数 。 有时 , 他的方法称为按结果调用 。 通常 , 按结果传递技术是通过复制实现的 。
  2. 按值传递结果:此方法使用输入/输出模式语义 。 它是“按值传递”和“按结果传递”的组合 。 就在将控制权转移回调用者之前 , 形式参数的值将被传输回实际参数 。 有时将此方法称为按值结果调用
  3. 按名称传递:这项技术用于Algol等编程语言中 。 在这种技术中 , 传递了变量的符号“ 名称 ” , 这使得变量可以被访问和更新 。
通常 , “按名称传递”的作用是在文本上将过程调用中的参数替换为过程主体中的相应参数 。
名称传递机制的含义:
每次传递形式参数时 , 都会重新评估参数表达式 。
该过程可以更改在参数表达式中使用的变量的值 , 从而更改表达式的值 。
【呼叫者|空投您需要的C / C ++中的参数传递技术】


    推荐阅读