Publi

Funciones que devuelven arrays

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);
}

También podría interesarte...

There are 3 comments left Ir a comentario

  1. Pingback: Bitacoras.com /

  2. algm /
    Usando Mozilla Firefox Mozilla Firefox 3.0.10 en Windows Windows XP

    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.

  3. blakeyed / Post Author
    Usando Mozilla Firefox Mozilla Firefox 3.0.6 en Gentoo Linux Gentoo Linux

    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 🙂

Leave a Reply