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

¿Cómo llamo/utilizo un array multidimensional en una función fuera de main? (C)

Estas en el tema de ¿Cómo llamo/utilizo un array multidimensional en una función fuera de main? (C) en el foro de C/C++ en Foros del Web. Hola! Declaré un array multidimensional en la función main, y quiero utilizarlo fuera de main, pero al tratar de compilar me da error, y no ...
  #1 (permalink)  
Antiguo 30/08/2011, 18:14
 
Fecha de Ingreso: julio-2007
Mensajes: 2
Antigüedad: 16 años, 9 meses
Puntos: 0
¿Cómo llamo/utilizo un array multidimensional en una función fuera de main? (C)

Hola! Declaré un array multidimensional en la función main, y quiero utilizarlo fuera de main, pero al tratar de compilar me da error, y no sé por qué. Acá está mi código (C):
Código PHP:

int TB
(char *cuad[3][3])
{
    *
cuad[3][3]= //ACÁ ESTÁ EL ERROR//
    
{
        {
'7','8','9'},
        {
'4','5','6'},
        {
'1','2','3'}
};
//etc.//
}
int main()
{
 
char cuad[3][3];
  
//etc.//
        
TB(&cuad[3][3]);
//etc.//


¿Dónde está el problema? ¿Falta algún * o &?

Gracias!!
  #2 (permalink)  
Antiguo 30/08/2011, 18:44
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: ¿Cómo llamo/utilizo un array multidimensional en una función fuera de main

Segun mi entender, no es posible realizar la asignacion que quieres.
En C es posible inicializar un arreglo con valores explicitos, pero no es posible asignarle valores así.

Osea: int a[] = { 1, 2, 3 }; sí esta permitido
pero: int a[3]; y luego a = { 1, 2, 3 }; o cualquier variante que pongas al lado izquierdo de la asignacion sera rechazado.

Dicho de otra forma, tu problema está al lado derecho de la asignacion, no al lado izquierdo.
Cuando se define una variable no se está asignando, se está inicializando, y ahí sí se permite.

Opciones:
- Inicializarlo en main.
- Inicializar otra variable en la funcion y hacer una copia, posiblemente usando memcpy() para llenar el arreglo que quieres.
- Hacer ciclos para inicializar el arreglo.
  #3 (permalink)  
Antiguo 30/08/2011, 19:45
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: ¿Cómo llamo/utilizo un array multidimensional en una función fuera de main

Por otro lado a la funcion le estas pasando referencia de un elemento del array que no existe.. ya que en c/c++ los arreglos empiezan con indice 0 y terminan con N-1 en tu caso 2.

Ademas de esa forma estarias pasando la referencia del ultimo (si estuvieses permitido). Lo que tienes que pasar es la referencia del arreglo, del primer elemento.

TB(cuad);

Despues cuando defines la funcion estas haciendo mal los tipos.

int TB(char *cuad[3][3])

Eso seria una referencia a un arreglo bidimencional y lo que tu quieres es un arreglo. Cuando se pasa un arreglo este siempre va por referencia asi que no sirve para nada pasar la cantidad de elementos. C/C++ son lenguajes de bajo nivel...se maneja memoria mas directa no como en otros lenguajes que un arreglo es un paquete y va entero....

Asi que la definicion podria ser:

int TB(char **cuad) // Doble puntero a char, arreglo bidimensional.

Por ultimo la asignacion como la hiciste no esta permitida. Tienes que copiar uno a uno cada elemento del array.

Estos son conceptos dificiles de entender....pero con la practica se puede!

Etiquetas: argumentos, funcion, multidimensional
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 01:18.