Olá pessoal,
Estou estudando C# por conta própria no momento, e na faculdade aprendo C e C++, e estava me perguntando…qual a diferença entre passagem de parametros por valor e por referencia entre o C#, C e C++?
Obrigado!
Gabriel.
Olá pessoal,
Estou estudando C# por conta própria no momento, e na faculdade aprendo C e C++, e estava me perguntando…qual a diferença entre passagem de parametros por valor e por referencia entre o C#, C e C++?
Obrigado!
Gabriel.
C - a passagem de parâmetros é sempre por valor; existe o tipo “ponteiro” que permite a você passar uma referência a um valor.
// simulando passagem por referência em C
void swap (int* x, int *y) { int tmp; tmp = *x; *x = *y; *y = tmp; }
...
int a, b;
swap (&a, &b);
C++ - a passagem de parâmetros é sempre por valor; existem os tipos “ponteiro” e “referência” que permitem a você passar uma referência a um valor.
// simulando passagem por referência em C++
void swap (int* x, int *y) { int tmp; tmp = *x; *x = *y; *y = tmp; }
// passagem de parâmetros do tipo referência em C++
void swap2 (int& x, int& y) { int tmp; tmp = x; x = y; y = tmp; }
...
int a, b;
swap (&a, &b);
swap2 (a, b);
C# - a passagem de parâmetros é por valor ou por referência, usando a palavra-chave “ref” ou “out”. Se você puder usar código “unsafe” você também pode usar passagem de valor por ponteiros, mas isso costuma ser mais lento (e é claro, inseguro).
// passagem por referência
void swap (ref int x, ref int y) { int tmp; tmp = x; x = y; y = tmp; }
int a, b;
swap (ref a, ref b); // a palavra-chave "ref" é obrigatória aqui, para lembrar o programador que está
// só lendo o programa que a passagem não é por valor e sim por referência.