2015-01-21 2 views
-3

У меня есть следующая программа:Объясните разницу между вызовом по ссылке и копирования/восстановления

int A[3]; 
k = 1 

void test(int a, int b, int c) { 
    c = 0; 
    b = 1; 
    A[k] = 7; 
    a++; 

} 

рядом я бегу этот метод с помощью копирования восстановления

A[0] = 2; 
A[1] = 4; 
k = 1; 
test(A[1],A[k],k); 

Я знаю, что к будет 0.

EDIT

Я хочу знать, как рассчитать это с помощью copy-restore не по значению, ссылке и т. Д. K будет 0, потому что он назначен на c и после завершения функции он скопирован в k. Вот объяснение What's the difference between call by reference and copy/restore, но Как оно ведет себя, когда два значения (a и b имеют одинаковое значение A [1]) Имеет ли значение вопрос? оба определены глобально

+0

Эпитомность лености. На этот вопрос можно легко ответить, скомпилировав код и выполнив полученный двоичный файл. –

+0

Я хочу понять, как это работает, а не только результат. – Maciek99

+1

@ Maciek99 Ваш вопрос: «Каким будет результат?» Если вы ищете что-то еще, пожалуйста, отредактируйте свой вопрос. –

ответ

1

Значения A[0] = 2 и 7 = A[1] как массив A и k.

Поскольку вы явно просили детали, здесь я иду:

В массиве A и k были глобально определен, вы можете изменить его с , где в программе вы хотите. Теперь, когда вы звоните заявление test(A[1],A[k],k);, копию значений A[1], A[k] и k выступают в качестве a, b и c соответственно в функции test().

Поскольку эти параметры передаются по значению , а не ссылкой, следовательно, все изменения, которые вам по переменным a, b, c в функции test() не влияют A[1], A[k] и k. Только те операторы, которые непосредственно ссылаются на глобальные переменные, такие как A[k] = 7;, подвержены влиянию, поскольку они являются глобальными.

Надеюсь, это помогло.

+0

Я просто добавлю детали. – shauryachats

+0

Он не передается по значению .. – Maciek99

+0

Извините, я не читал изменений. – shauryachats

0

K не определено. Следующие программные выходы 1:

#include<bits/stdc++.h> 
using namespace std; 

int A[3]; 
int k = 1; 

void test(int a, int b, int c) { 
    c = 0; 
    b = 1; 
    A[k] = 7; 
    a++; 

} 
int main() 
{ 
A[0] = 2; 
A[1] = 4; 
k = 1; 
test(A[1],A[k],k); 
cout<<k<<endl; 
return 0; 
} 
Смежные вопросы