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 6 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 🙂

  4. OKBet /
    Usando Google Chrome Google Chrome 114.0.0.0 en Windows Windows NT

    nice blog! its interesting. thank you for sharing.
    Guide to NBA Betting for Beginners

  5. Mike Rooney /
    Usando Google Chrome Google Chrome 116.0.0.0 en Windows Windows NT

    Your blog provided us with valuable information. I am looking forward to read more blog posts from here keep it up!!
    David Haller Black Coat

  6. Andrew Mark /
    Usando Google Chrome Google Chrome 116.0.0.0 en Windows Windows NT

    Excellent article. The writing style which you have used in this article is very good and it made the article of better quality.
    Blade Runner Coat

Leave a Reply to algm Cancle Reply