Autor
|
Tema: ¿Las matrices se pasan a las funciones por valor o referencia? [C] (Leído 2,461 veces)
|
NOB2014
Desconectado
Mensajes: 366
|
Hola, gente. Passing a One-Dimensional Array When a one-dimensional array is passed to a function, the array’s address is passed by value. This makes the transfer of information more efficient since we are not passing the entire array and having to allocate memory in the stack for it. Normally, this means the array’s size must be passed. If we don’t, from the function’s perspective all we have is the address of an array with no indication of its size. Los consulto porque tengo una duda con esta parte del libro, si mi traductor no falla dice que las matrices se pasan a funciones por valor, yo tengo entendido que el identificador de una matriz contiene la dirección de memoria del primer elemento o primer byte de la misma, por lo tanto, cualquier modificación que se efectué en la función llamada se ve reflejado en la función llamadora como lo refleja el código que dejo a continuación. - #include <stdio.h> void ab( int a[], size_t tam ); int main( void ){ int a[] = {5, 3, 8, 99, 11}; size_t tam = 5; printf( "\n \"a\" antes de la llamada a la funcion vale........:%d", a [0] ); ab(a, tam); printf( "\n \"a\" despues de la llamada a la funcion vale......:%d\n\n", a [0] ); } void ab( int a[], size_t tam ){ a[0] = 1; }
Es todo, espero que alguien me diga como debo interpretar esto. - Saludos.
|
|
|
En línea
|
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
|
|
|
class_OpenGL
Desconectado
Mensajes: 437
Si usas Direct3D, no eres mi amigo :P
|
En C el paso por referencia o valor se confunde mucho. Aunque parezca extraño, todo en C se pasa por valor. Cuando pasas un arreglo por parámetros lo que pasas es una copia de la dirección al primer byte del arreglo.
Algunos interpretan que cuando una función pide una dirección de una variable la variable en sí es pasada por referencia, pues la función puede cambiar el valor de la variable, pero no se ha de confundir el paso por valor por el paso por referencia. Estas definiciones están mucho más claras en C++
|
|
« Última modificación: 4 Junio 2016, 17:30 pm por class_OpenGL »
|
En línea
|
| Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL |
|
|
|
|
DarK_FirefoX
Desconectado
Mensajes: 1.263
Be the change you wanna see in te world
|
En C los arrays de una dimensión se pasan a una función por referencia, no obstante, el valor de la referencia se pasa por valor! O sea, la dirección en memoria (referencia) que se le pasa a la función, se pasa por valor. Debido esto, normalmente se pasa el tamaño del array en otro parámetro para tener control de cual tamaño tiene el array.
Espero te haya aclarado algo.
Salu2s
|
|
|
En línea
|
|
|
|
NOB2014
Desconectado
Mensajes: 366
|
Hola, mucha gracia a ambos por ocuparse. - Me queda todo muy claro, el identificador del array se pasa por valor y como la función llamada recibe una copia exacta de la dirrección del primer elemento del array, toda modificación que se efectúe en dicha función se ve reflejada en el array original. - Voy a agregar que los elementos del array individualmente se pasan por valor, les dejo este Ej. de Eternal Idol (que encontré en el foro) para pasarlos por referencia. - #include <stdio.h> int Valor(int); int Referencia(int*); int main(void) { int array[30]; array[4] = 33; printf("Posicion 5, Valor: %d\r\n", Valor (array [4])); printf("Posicion 5, Valor: %d\r\n", array [4]); printf("Posicion 5, Referencia %d\r\n", Referencia (&array [4])); printf("Posicion 5, Referencia %d\r\n", array [4]); return 0; } int Valor(int v) { return v; } int Referencia(int *r) { return (*r)++; }
Saludos.
|
|
|
En línea
|
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Copiar un List en otro (Por valor no por referencia)
.NET (C#, VB.NET, ASP)
|
BlaineMonkey
|
5
|
11,118
|
18 Febrero 2010, 13:16 pm
por raul338
|
|
|
c++ Funciones por referencia
Programación C/C++
|
programador10
|
2
|
2,489
|
11 Junio 2011, 06:18 am
por programador10
|
|
|
Duda acerca de como pasar por referencia matrices dinamicas?
Programación C/C++
|
xuhipoint
|
6
|
5,162
|
11 Mayo 2014, 22:59 pm
por xuhipoint
|
|
|
funciones paso por referencia
Programación C/C++
|
vivianfes
|
6
|
2,484
|
4 Marzo 2015, 01:09 am
por vivianfes
|
|
|
Demostración de porque los punteros se pasan a función por valor.[C]
« 1 2 »
Programación C/C++
|
NOB2014
|
10
|
4,736
|
22 Mayo 2016, 21:00 pm
por NOB2014
|
|