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

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Duda con matrices y paso por parametro
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] 3 Ir Abajo Respuesta Imprimir
Autor Tema: Duda con matrices y paso por parametro  (Leído 7,927 veces)
amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Duda con matrices y paso por parametro
« Respuesta #10 en: 22 Abril 2014, 23:43 pm »

La primera linea no va a compilar...

Y si compila no va a aceptar matrices estaticas. Solo las que se han creado dinámicamente.


En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Duda con matrices y paso por parametro
« Respuesta #11 en: 23 Abril 2014, 02:40 am »

Si os sirve de algo,
Código
  1. int funcion ( int matriz[][], int fila, int columna){...}

es lo mismo que
Código
  1. int funcion ( int **matriz, int fila, int columna){...}
No. Como ya te indico amchacon la primera declaración:
Código
  1. int funcion ( int matriz[][], int fila, int columna){...}
Se procesa como si fuera:
Código
  1. int funcion ( int (*matriz)[], int fila, int columna){...}
Y el compilador debe quejarse ya que el tipo apuntado esta incompleto: "int []".

Para que pueda compilarse se debe completar el tipo, por ejemplo:
Código
  1. int funcion ( int matriz[][10], int fila, int columna){...}
La cual se procesa como si fuera:
Código
  1. int funcion ( int (*matriz)[10], int fila, int columna){...}

Un saludo


En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
vangodp


Desconectado Desconectado

Mensajes: 455



Ver Perfil
Re: Duda con matrices y paso por parametro
« Respuesta #12 en: 23 Abril 2014, 04:44 am »

int **matriz, Esto es un puntero que apunta otro puntero ¿verdad señores? No lo entiendo muy bien ese mecanismo aun  :laugh:

¿Que efecto tiene poner () en (*matriz)?
As veces veo cosas como *(matriz). No digo que sea en caso de matrices ni de tablas por que no me acuerdo :), solo se que as veces lo veo como ahora y no se muy bien cual es el mecanismo que tiene eso.
¡Gracias maestros! Que fieras soys =D
En línea

Blaster

Desconectado Desconectado

Mensajes: 190


Ver Perfil
Re: Duda con matrices y paso por parametro
« Respuesta #13 en: 23 Abril 2014, 14:00 pm »

int **matriz, Esto es un puntero que apunta otro puntero ¿verdad señores? No lo entiendo muy bien ese mecanismo aun  :laugh:

En efecto eso seria un puntero a puntero.

¿Que efecto tiene poner () en (*matriz)?
As veces veo cosas como *(matriz). No digo que sea en caso de matrices ni de tablas por que no me acuerdo :), solo se que as veces lo veo como ahora y no se muy bien cual es el mecanismo que tiene eso.

En realidad no tiene ningun efecto pasarlo de esta manera

Código
  1. int funcion ( int matriz[][10], int fila, int columna)

Es totalmente equivalente al pasarlo de esta forma

Código
  1. int funcion ( int (*matriz)[10], int fila, int columna)

Tal vez sean distintas sintaxticamete pero conceptualmente son equivalentes, indicando que el parametro es un puntero a matriz de 10 int

Saludos..

En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Duda con matrices y paso por parametro
« Respuesta #14 en: 23 Abril 2014, 14:17 pm »

¿Que efecto tiene poner () en (*matriz)?
En el caso de una declaración primero se consideran los paréntesis y corchetes (para indicar función y array, respectivamente) y solo después el '*', por ejemplo:
Código
  1. /* Array de <10 elementos de tipo "int *"> */
  2. int *matriz[10];

Si se desea utilizar otro orden (primero el asterisco) se deben utilizar paréntesis:
Código
  1. /* Puntero a <array de 10 elementos de tipo "int"> */
  2. int (*matriz)[10];

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Duda con matrices y paso por parametro
« Respuesta #15 en: 23 Abril 2014, 15:02 pm »

Código
  1. int funcion ( int matriz[][], int fila, int columna){...}

Código
  1. int funcion ( int **matriz, int fila, int columna){...}

Fallo mío.



En verdad, no le veo la utilidad a un parámetro del tipo:
Código
  1. int funcion ( int matriz[][9]){...}

Pudiendo pasar:
Código
  1. int funcion ( int **matriz){...}

Hay alguna ganancia? Se puede pasar una matriz a cualquiera de ellos. Es más, se detecta como una redefinición en caso de poner:

Código
  1. void f(int *m[5]){
  2. }
  3. void f(int **m){
  4. }

No se sobrecarga.
En línea

vangodp


Desconectado Desconectado

Mensajes: 455



Ver Perfil
Re: Duda con matrices y paso por parametro
« Respuesta #16 en: 23 Abril 2014, 15:07 pm »

madre mía que verde estoy con las matrices, jeje gracias chicos  :laugh:
voy a tener que ponerme a 100 con ellas que me tienen algo desconcertado  :-(
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Duda con matrices y paso por parametro
« Respuesta #17 en: 23 Abril 2014, 15:32 pm »

Quizás te ayude verlo como punteros, y como punteros de punteros, no como "matrices".
En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Duda con matrices y paso por parametro
« Respuesta #18 en: 23 Abril 2014, 16:19 pm »

En verdad, no le veo la utilidad a un parámetro del tipo:
Código
  1. int funcion ( int matriz[][9]){...}

Pudiendo pasar:
Código
  1. int funcion ( int **matriz){...}

Hay alguna ganancia? Se puede pasar una matriz a cualquiera de ellos. Es más, se detecta como una redefinición en caso de poner:

Código
  1. void f(int *m[5]){
  2. }
  3. void f(int **m){
  4. }

No se sobrecarga.
La diferencia en que una definición espera una matriz estatica y otra definición espera punteros de punteros.

A la seguna definición no le puedes pasar una matriz estatica:
Citar
error: cannot convert 'int (*)[9]' to 'int**' for argument '1' to 'void f(int**)'|

Las matrices estáticas no se almacenan como punteros de punteros, sino como un array muy largo. Es el compilador quien traduce los dos [] [] por uno solo []. Para hacer eso necesita saber el tamaño del primero.
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
vangodp


Desconectado Desconectado

Mensajes: 455



Ver Perfil
Re: Duda con matrices y paso por parametro
« Respuesta #19 en: 23 Abril 2014, 17:38 pm »

Si que puntero de puntero tiene que apuntar a puntero, y la otra pues es estática.
Algo me queda lo que me falla es lo de las () que me explicasteis antes. XDD
¡Gracias compañeros!
Voy a repasar un poco los punteros, y las matrices. Si tengo dudas y me podéis ayudar luego pues se los agradezco  ;)
En línea

Páginas: 1 [2] 3 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Paso de flujos por parametro
Programación C/C++
darkvidhack 3 2,703 Último mensaje 17 Mayo 2011, 22:48 pm
por satu
Paso de parametro por referencia
Programación C/C++
abad023 5 3,383 Último mensaje 6 Diciembre 2011, 08:21 am
por x64core
duda del parametro -d en iptables
Seguridad
sancakoky 2 2,584 Último mensaje 23 Marzo 2012, 12:12 pm
por adastra
sfml paso por parametro de window
Programación C/C++
patilanz 0 1,747 Último mensaje 18 Octubre 2014, 19:24 pm
por patilanz
Problema con Paso de Tablas Bidimensionales como parámetro
Programación C/C++
jamatbar 1 2,277 Último mensaje 10 Diciembre 2014, 16:21 pm
por Eternal Idol
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines