Каково различие между шагом переменных стоимости и ссылке?

Титул ясный. Какое фундаментальное различие или фундаментальные есть между этими методами в момент определения функций или методов?

Важно: Несмотря на то, что это вопрос, очень сходный с этой в stackoverflow, он не пробует быть переводом ни одного из Ваших ответов.

14
задан 23.05.2017, 15:39
2 ответа

Когда он из-за стоимости, информация о переменной они хранятся в адресе различной памяти, получив ее в функции, следовательно, если стоимость этой переменной меняется, он не затрагивает первоначальную переменную, только изменяется внутри контекста функции.

Когда он из-за ссылки, переменная, которая такой получается как параметр в функции указывает точно на тот же адрес памяти, что и первоначальная переменная, которым, если внутри функции изменяется Ваша стоимость также, изменяется первоначальная переменная.

Как он объясняется в этом gif.

gif explicativo

16
ответ дан 01.12.2019, 08:14

Сущность различия соответствует свободе (или ограничение), что существует на параметре функции или метода.

Шаг стоимости относится, который перемещают копию стоимости параметра с функции / метода клиент. В существо копия, изменения, реализованные прямо в функции / методе на стоимости параметра не будут отражены, закончив выполнение функции / метода.

Шаг ссылке относится, который перемещают ту же стоимость параметра с функции / метода клиент. В существо та же стоимость, изменения, реализованные прямо в функции / методе на стоимости параметра будут отражены, закончив выполнение функции / метода.

Из-за того, что он помещает пример на этом, представь физический документ, который у тебя есть в твоих руках. Этот документ ты это перемещаешь из-за стоимости, когда сначала ты достаешь копию документа и копии, вручаешь ее приятелю. Если приятель, из-за какого-то происшествия, пятна этот документ, твой первоначальный документ не окажется поврежденным, так как приятель работал на копии. Наоборот, переместив из-за ссылки документ, он значит, что ты вручаешь первоначальный документ твоему приятелю, и если он это сжигает, создает один ново с контентом полностью отлично и возвращает это тебе, тогда сейчас, когда он вручил тебя это будет документ и первоначальный документ терялся :(.

Более техническим способом, возможно видеть этот пример в C:

#include <stdio.h>

void pasoPorValor(int i) {
    i = 50;
}
void pasoPorReferencia(int *i) {
    (*i) = -10;
}
int main() {
    int i = 10;
    pasoPorValor(i);
    printf("%d\n", i);
    //&i significa que se pasa la referencia de la variable i
    pasoPorReferencia(&i);
    printf("%d\n", i);
    return 0;
}

Результат печати:

10
-10

Важно знать, позволяет ли использованный язык программирования шаг переменных стоимости и(или) ссылке. Например, Java и Ла Скала не позволяют перемещать переменные из-за ссылки. C, C ++, C#, Visual Basic, между другими, да они позволяют оба типа шага переменных.

Важно: Не нужно путать шаг ссылки с шагом стоимости ссылки. Последний значит, что проходит копия ссылки, однако позволяет редактирование состояния ссылки, снабженной ссылками параметром (стойте излишек).

6
ответ дан 01.12.2019, 08:14
  • 1
    C он не позволяет шаг ссылке, возможно говорить, что " simula" я прохожу по ссылке, когда он enví в указатель, но если ты стараешься изменять указатель (не переменная, в которую он указывает) на изменения, они не будут затрагивать указатель вне funció n. – Alejandro Montilla 15.12.2016, 23:18