Discusión:Argumento (informática)

De Wikipedia, la enciclopedia libre
Ir a la navegación Ir a la búsqueda
Computer-aj aj ashton 01.svg Esta página le interesa al Wikiproyecto Informática.

Diferencia entre parámetros y argumentos[editar]

En programación sí existe una diferencia entre parámetro y argumento (resalto el artículo de Diferencias entre parámetros y argumentos de MSDN para comprender la diferencia). No sé si existe otra acepción de la palabra en el ámbito de la informática como para hacer esta distinción en un subtema del mismo artículo o hacer artículos separados para ambas definiciones. --JCastillo1001 (discusión) 15:07 25 nov 2014 (UTC)


Paso por referencia vs puntero (¿tiene C argumentos por referencia?)[editar]

Supongo que esto da para un debate, por eso lo pongo aquí, sin embargo para mi el paso de argumentos (que aquí se describen) es cosa del lenguaje de programación y/o compilador y no los chanchullos que podamos hacer. El propio paso por valor resultado es un ejemplo, lo podemos simular, pero no lo tenemos en lenguajes populares actuales, y nadie ha editado eso, más allá de vandalismo, para decir "no es verdad que no lo tengamos", a diferencia del parámetro por referencia.

Así pues, el tipo de paso de parámetros que ofrece un lenguaje de programación, a mi ver, es el que ofrece el propio lenguaje o compilador (quien dice que no pueden editarlo), independientemente de que después podamos simular otros gracias a otras herramientas del lenguaje. Así que C lo que ofrece es paso de parámetros por valor, igual que Java. Le pases lo que le pases, el lo pasa por valor, incluso un puntero. ¿Que un puntero te permite simular el paso por referencia? Si, claro, pero es una argumento que estás pasando por valor. C++ SI permite el paso por referencia (int& a), independientemente de que esto el compilador lo traduzca en (int* a) y un a = 1; sea el equivalente a *a = 1; en C. La diferencia es que en C tenemos un argumento, "a" que está pasado por valor (un puntero a int, en este ejemplo) mientras que en C++ tenemos un argumento por referencia. En C++ podemos hacer a = 1 y se modifica fuera, en a, primero no compila, pero si lo obviamos hay que hacer *a (accede a la memoria) y ya no estás trabajando con el argumento (por valor) si no con la posición apuntada (si lo quieres llamar referencia, me parece bien, pero el argumento es "a", que es un puntero, por valor).

Es decir, solo mirando C++, podemos hacer: void f(int& a) void f(int* a) Y el primero te diría que es una función con un argumento por referencia y el segundo es una función a la que se le pasa (por valor) un puntero (o referencia, como queráis llamarlo, pero la frase ya no es la misma: le paso un argumento por referencia vs le paso una referencia [por valor])