| 
	
		|  Autor | Tema: Duda con matrices y paso por parametro  (Leído 9,082 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 | 3,031 |  17 Mayo 2011, 22:48 pm por satu
 |  
						|   |   | Paso de parametro por referencia Programación C/C++
 | abad023 | 5 | 3,832 |  6 Diciembre 2011, 08:21 am por x64core
 |  
						|   |   | duda del parametro -d en iptables Seguridad
 | sancakoky | 2 | 2,860 |  23 Marzo 2012, 12:12 pm por adastra
 |  
						|   |   | sfml paso por parametro de window Programación C/C++
 | patilanz | 0 | 1,953 |  18 Octubre 2014, 19:24 pm por patilanz
 |  
						|   |   | Problema con Paso de Tablas Bidimensionales como parámetro Programación C/C++
 | jamatbar | 1 | 2,670 |  10 Diciembre 2014, 16:21 pm por Eternal Idol
 |    |