参数传递机制?

时间:2013-12-19 19:12:52

标签: c++ parameter-passing

“通过值 - 结果”,“通过引用传递”和“通过名称传递”之间有什么区别?

我有一个C ++程序:

#include <stdio.h>
#include <iostream>
using namespace std;

void swap(int a, int b) {
   int temp;
   temp = a;
   a = b;
   b = temp;
}
int main() {
   int value = 2, list[5] = {1, 3, 5, 7, 9};
   swap(value, list[0]);
   swap(list[0], list[1]);
   swap(value, list[value]);
   return 0;
}

这是调用交换后的解决方案:http://imgur.com/1HkCAnm 我不知道它们之间的区别。请帮我解释一下。

1 个答案:

答案 0 :(得分:1)

默认情况下,C ++使用call by value,如果参数设置正确,则可以使用call by reference。 (指针参数传递指针的。)

如果您在下面更新的示例中指定了引用参数(int& a),则交换功能将起作用。

C ++不支持

Call by value-result;它的工作原理是在函数开头传入值,并在函数末尾复制值。

Call by name很奇怪。它不是传递值,而是传递评估变量的代码(也称为thunks)(在调用范围内)。数组引用因未按照名称使用调用进行评估而臭名昭着。

void swap(int& a, int& b) {
   int temp;
   temp = a;
   a = b;
   b = temp;
}