Ver Mensaje Individual
  #2 (permalink)  
Antiguo 17/03/2016, 06:47
eferion
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 7 meses
Puntos: 204
Respuesta: array bidimensional fincion

En C hay que tener cuidado con estas cosas. Los arrays se pueden almacenar de varias formas en C.

Código C:
Ver original
  1. // Array definido en la pila
  2. char array1[10];
  3.  
  4. // En este caso array2 es un puntero y apunta a una región de memoria (que puede ser de solo lectura) donde se encuentra la cadena
  5. char *array2 = "una prueba";
  6.  
  7. // Array bidimensional definido en la pila.
  8. // Nota que para acceder a un char tienes que usar dos valores
  9. char bidi1[2][10];
  10.  
  11. // Puntero a array bidimensional
  12. // Los dos punteros indican precisamente eso, que hacen falta dos saltos
  13. // para encontrar un char.
  14. char **bidi2;

Por otro lado, los arrays bidimensionales definidos en la pila tienen una estructura plana, quiero decir, los elementos del array se encuentran en posiciones sucesivas de la pila. En el caso de bidi[2][10], primero están los diez bytes del primer elemento y después los diez bytes del segundo elemento.

Sin embargo un array bidimensional en memoria dinámica ya no se almacena (o no tiene por que almacenarse) de forma secuencial en la memoria.

Para explicar lo siguiente vamos a asumir un array bidimensional tal que bidi[filas][columnas]. Nota, en el caso de los arrays bidimensionales en la pila, que para acceder a bidi[1] el compilador necesita saber cuántos elementos tiene cada fila. Este dato es bastante importante para entender la siguiente línea:

Código C:
Ver original
  1. // El tamaño de las columnas ha de ser fijo en el caso de arrays en la pila
  2. void pal(char * palabra,char[][10]  bidi){

Esto permite que el compilador sepa lo que le vas a pasar a la función de cara a poder almacenar las cosas correctamente. Es engorroso y menos usable que en el caso de arrays en la memoria dinámica (porque esta función no dará resultados buenos si le intentas pasar un array tal que bidi2[2][5])... pero es como hay que usarlo.

Un saludo.
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.