Passagem de parametros em C/C++/C#

1 resposta
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.

1 Resposta

T

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.
Criado 7 de dezembro de 2007
Ultima resposta 7 de dez. de 2007
Respostas 1
Participantes 2