Foros del Web » Programación para mayores de 30 ;) » C/C++ »

array bidimensional fincion

Estas en el tema de array bidimensional fincion en el foro de C/C++ en Foros del Web. Tengo una duda, se puede devolver un array bidimencional mediante referencia me entere que por return no se puede. E estado intentado y buscando pero ...
  #1 (permalink)  
Antiguo 17/03/2016, 06:00
 
Fecha de Ingreso: enero-2014
Mensajes: 16
Antigüedad: 10 años, 10 meses
Puntos: 0
Pregunta array bidimensional fincion

Tengo una duda, se puede devolver un array bidimencional mediante referencia
me entere que por return no se puede.
E estado intentado y buscando pero no e encontrado nada

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <conio.h>
  5.  
  6. //-- recibe dos parametros una cadena y un array bidimensional de cadenas
  7. void pal(char * palabra,char * bidi){
  8.     strcpy(palabra, "hola");
  9.    
  10.         // en la posicion 0 y 1 de arrar intento introducir un texto
  11.     strcpy(bidi[0], "hola");
  12.     strcpy(bidi[1], "Adios");
  13.    
  14. //return bidi;
  15. }
  16.  
  17. //-- MAIN -----------------------------------------------------------------------------
  18. int main(int argc, char *argv[]) {
  19.     printf("\n Biblioteca");
  20.     printf("\n--------------------------------\n");
  21.  
  22.     //- creo las variables
  23.     char palabra[100];
  24.     char bidi[2][50] = {""};
  25.        
  26.     //- llamo a la funcion
  27.     pal(palabra, bidi);
  28.        
  29.     // y muestro el valor de las variables.
  30.     printf(" %s\n", bidi[0]);
  31.     printf(" %s\n", bidi[1]);
  32.     printf(" %s\n", palabra);
  33.    
  34. return 0;}

C me esta haciendo un lio
  #2 (permalink)  
Antiguo 17/03/2016, 06:47
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 1 mes
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.

Etiquetas: cadenas, char, funciones
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:38.