Autor
|
Tema: Duda con matrices y paso por parametro (Leído 7,978 veces)
|
amchacon
Desconectado
Mensajes: 1.211
|
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
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
Si os sirve de algo, int funcion ( int matriz[][], int fila, int columna){...}
es lo mismo que int funcion ( int **matriz, int fila, int columna){...}
No. Como ya te indico amchacon la primera declaración: int funcion ( int matriz[][], int fila, int columna){...}
Se procesa como si fuera: 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: int funcion ( int matriz[][10], int fila, int columna){...}
La cual se procesa como si fuera: 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
Mensajes: 455
|
int **matriz, Esto es un puntero que apunta otro puntero ¿verdad señores? No lo entiendo muy bien ese mecanismo aun ¿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
Mensajes: 190
|
int **matriz, Esto es un puntero que apunta otro puntero ¿verdad señores? No lo entiendo muy bien ese mecanismo aun 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 int funcion ( int matriz[][10], int fila, int columna)
Es totalmente equivalente al pasarlo de esta forma 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
Mensajes: 1.639
|
¿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: /* Array de <10 elementos de tipo "int *"> */ int *matriz[10];
Si se desea utilizar otro orden (primero el asterisco) se deben utilizar paréntesis: /* Puntero a <array de 10 elementos de tipo "int"> */ 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
Mensajes: 3.412
ASMático
|
int funcion ( int matriz[][], int fila, int columna){...}
int funcion ( int **matriz, int fila, int columna){...}
Fallo mío.
En verdad, no le veo la utilidad a un parámetro del tipo: int funcion ( int matriz[][9]){...}
Pudiendo pasar: 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: void f(int *m[5]){ } void f(int **m){ }
No se sobrecarga.
|
|
|
En línea
|
|
|
|
vangodp
Desconectado
Mensajes: 455
|
madre mía que verde estoy con las matrices, jeje gracias chicos voy a tener que ponerme a 100 con ellas que me tienen algo desconcertado
|
|
|
En línea
|
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
Quizás te ayude verlo como punteros, y como punteros de punteros, no como "matrices".
|
|
|
En línea
|
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
En verdad, no le veo la utilidad a un parámetro del tipo: int funcion ( int matriz[][9]){...}
Pudiendo pasar: 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: void f(int *m[5]){ } void f(int **m){ }
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: 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
|
|
|
|
vangodp
Desconectado
Mensajes: 455
|
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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Paso de flujos por parametro
Programación C/C++
|
darkvidhack
|
3
|
2,710
|
17 Mayo 2011, 22:48 pm
por satu
|
|
|
Paso de parametro por referencia
Programación C/C++
|
abad023
|
5
|
3,406
|
6 Diciembre 2011, 08:21 am
por x64core
|
|
|
duda del parametro -d en iptables
Seguridad
|
sancakoky
|
2
|
2,591
|
23 Marzo 2012, 12:12 pm
por adastra
|
|
|
sfml paso por parametro de window
Programación C/C++
|
patilanz
|
0
|
1,751
|
18 Octubre 2014, 19:24 pm
por patilanz
|
|
|
Problema con Paso de Tablas Bidimensionales como parámetro
Programación C/C++
|
jamatbar
|
1
|
2,285
|
10 Diciembre 2014, 16:21 pm
por Eternal Idol
|
|