elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  ¿Las matrices se pasan a las funciones por valor o referencia? [C]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿Las matrices se pasan a las funciones por valor o referencia? [C]  (Leído 2,463 veces)
NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
¿Las matrices se pasan a las funciones por valor o referencia? [C]
« en: 4 Junio 2016, 16:50 pm »

Hola, gente.

Citar
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. -

Código
  1. #include <stdio.h>
  2.  
  3. void ab( int a[], size_t tam );
  4.  
  5. int main( void ){
  6. int a[] = {5, 3, 8, 99, 11};
  7. size_t tam = 5;
  8.  
  9. printf( "\n \"a\" antes de la llamada a la funcion vale........:%d", a[0] );
  10. ab(a, tam);
  11. printf( "\n \"a\" despues de la llamada a la funcion vale......:%d\n\n", a[0] );
  12.  
  13.  
  14. }
  15.  
  16. void ab( int a[], size_t tam ){
  17. a[0] = 1;
  18. }
  19.  
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 Desconectado

Mensajes: 437

Si usas Direct3D, no eres mi amigo :P


Ver Perfil
Re: ¿Las matrices se pasan a las funciones por valor o referencia? [C]
« Respuesta #1 en: 4 Junio 2016, 17:27 pm »

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 Desconectado

Mensajes: 1.263


Be the change you wanna see in te world


Ver Perfil
Re: ¿Las matrices se pasan a las funciones por valor o referencia? [C]
« Respuesta #2 en: 4 Junio 2016, 17:32 pm »

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 Desconectado

Mensajes: 366



Ver Perfil
Re: ¿Las matrices se pasan a las funciones por valor o referencia? [C]
« Respuesta #3 en: 6 Junio 2016, 14:51 pm »

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

Código
  1. #include <stdio.h>
  2.  
  3. int Valor(int);
  4. int Referencia(int*);
  5.  
  6. int main(void)
  7. {
  8.    int array[30];
  9.    array[4] = 33;
  10.  
  11.    printf("Posicion 5, Valor: %d\r\n", Valor(array[4]));
  12.    printf("Posicion 5, Valor: %d\r\n", array[4]);
  13.    printf("Posicion 5, Referencia %d\r\n", Referencia(&array[4]));
  14.    printf("Posicion 5, Referencia %d\r\n", array[4]);
  15.  
  16.    return 0;
  17. }
  18.  
  19. int Valor(int v)
  20. {
  21.  return v;
  22. }
  23.  
  24.  
  25. int Referencia(int *r)
  26. {
  27.  return (*r)++;
  28. }

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.-
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines