2013-12-19 3 views
2

В чем разница между «переданным значением-результатом», «переданным по ссылке» и «пройденным именем»?Механизмы передачи параметров?

У меня есть программа на 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

Возможные дубликатами: [здесь] (http://stackoverflow.com/questions/410593/pass-by-reference-value-in-c), [здесь] (http://stackoverflow.com/ вопросы/2278700/разница между вызовами по ссылке и вызову по значению) и [здесь] (http://stackoverflow.com/questions/2207179/difference-between-value-parameter-and- справочно-параметр). – JBentley

ответ

1

C++ использует call by value по умолчанию и может использовать call by reference, если аргумент правильно оформлен. (Pointer аргументы передать значение указателя.)

Если указать ссылочный аргумент (int& a) в обновленном образце ниже), ваша функция подкачки будет работать.

Call by value-result не поддерживается C++; он работает, передавая значение в начале функции и копируя значение в конце функции.

Call by name просто странно. Вместо передачи значений он передает биты кода (aka thunks), которые оценивают переменную (в области вызова). Ссылки на массивы печально известны тем, что они не оцениваются, как можно было бы ожидать, используя вызов по имени.

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

О, спасибо вам большое! :) –

Смежные вопросы