Inicio > C/C++ > Funciones que devuelven arrays

Funciones que devuelven arrays

Jueves, 28 de Mayo de 2009 blakeyed Dejar un comentario Ir a comentarios

Al principio, cuando empezaba a programar, yo me quejaba mucho de esa tonta manía de C que no me dejaba devolver arrays como resultado de una función.

Aunque al final, devolver arrays es una tontería, gasta memoria, gasta tiempo y termina siendo más fácil solucionarlo todo con un puntero.

Pero bueno, si realmente queremos devolver un array, siempre podemos meterlo dentro de un registro. Probando con una cadena de caracteres:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#include <string.h>

typedef struct
{
    char cadena[1000];
} t_array;

t_array devuelvo()
{
    t_array otroarr;
    printf("\nDirección de cadena: %X\nCadena: %s\n", &otroarr, otroarr.cadena);
    strcpy(otroarr.cadena, "ESTE STRING APARECE VARIAS VECES EN EL VOLCADO DE MEMORIA");
    printf("\nDirección de cadena: %X\nCadena: %s\n", &otroarr, otroarr.cadena);
    return otroarr;
}

int main()
{
    t_array array;
    array=devuelvo(&mem);
    printf("\nDirección de cadena: %X\nCadena: %s\n", &array, array.cadena);
}
Categories: C/C++ Tags: , ,
votar
  1. Martes, 9 de Junio de 2009 a las 15:24 | #1

    Yo soy partidario de hacer eso con un puntero.

    Mandas un puntero al array y a correr ^^
    Una vez implementé algo parecido pero que devolvía estructuras. La gracia estaba en que podía ser cualquier tipo de estructura (tenía 9 o 10 en total). Al final lo solucioné usando los temidos punteros a void.

  2. Martes, 9 de Junio de 2009 a las 16:13 | #2

    Yo también soy partidario de hacerlo con punteros, como digo en el post… pero sabes que cuando alguien me dice:
    “¿y no se puede devolver un array como resultado de una función?”

    tras advertirle lo de los punteros, le digo, pero se puede!

    Pues a mí los punteros a void me encantan, hay que tener un poco de cuidado, pero mira, funcionan… luego en C++ somos más elegantes y usamos templates :)

  1. Jueves, 28 de Mayo de 2009 a las 14:52 | #1

Visita otras webs de la red