Fdout = (int *) malloc(X * sizeof(int));

di il
5 risposte

Fdout = (int *) malloc(X * sizeof(int));

Salve a tutti ho un dubbio su questa malloc

fdout = (int *) malloc(X * sizeof(int))

non capisco il significato di (int *).

Grazie mille!!

5 Risposte

  • Re: Fdout = (int *) malloc(X * sizeof(int));

    "int*" è un puntatore a "int"

    scritto tra parentesi in quella posizione serve per effettuare un cast esplicito del dato ritornato dalla funzione malloc() da "void*" ( che è il tipo di dato ritornato da malloc() ) a "int*" ( che immagino sia il tipo di dato rappresentato da "fdout" )
  • Re: Fdout = (int *) malloc(X * sizeof(int));

    Secondo me stai affrontando male lo studio del linguaggio.

    Non puoi leggere del codice e chiedere cosa è int *

    Prima si studiano i puntatori e poi si affrontano i codici d'esempio che li utilizzano ...


    Ovviamente è solo un consiglio
  • Re: Fdout = (int *) malloc(X * sizeof(int));

    Vi ringrazio moltissimo, ho già provato a studiare i puntatori, ma sono un bel po duro di comprendonio.... più o meno avevo capito che quello era un puntatore non avevo capito a cosa serviva messo in quella posizione, non avevo collegato che la malloc mi da un void mentre effettivamente fdout è un int ancora grazie infinite.
  • Re: Fdout = (int *) malloc(X * sizeof(int));

    Spero che vada bene scrivere ancora qui dato che l argomento è sempre lo stesso...

    piped = (pipe_t *) malloc (N*sizeof(pipe_t));

    Come mi veniva spiegato prima il primo (pipe_t *) vuol dire:

    "pipe_t *" è un puntatore a "pipe_t "
    scritto tra parentesi in quella posizione serve per effettuare un cast esplicito del dato ritornato dalla funzione malloc() da "void*" a "pipe_t *" tipo di dato rappresentato da "piped"

    ora non mi torna il (pipe_t) essendo N di tipo int.

    Mi spiace per la banalità delle domande....
  • Re: Fdout = (int *) malloc(X * sizeof(int));

    Sizeof(pipe_t): numeri di byte necessary per allocare UN oggetto di tipo pipe_t in memoria (per la precisione, nello heap)

    N*sizeof(pipe_t): numeri di byte necessari per allocare N oggetti di tipo pipe_t

    A questo punto:

    malloc(N*sizeof(pipe_t))

    ritorna un puntatore generico (void *) ad un blocco di memoria (allocato nello heap) in grado di tenere un vettore di N oggetti di tipo pipe_t.


    Quindi:

    (pipe_t *)malloc(N*sizeof(pipe_t))


    dice che il puntatore NON E ' puntatore generico, ma un puntatore ad un vettore di N oggetti di tipo pipe_t

    Dove pipe_t e' il tipo di pipe


    A parte la battuta, un modo alternativo per allocare un vettore di N elementi di tipo pipe_t e':


    (pipe_t *)calloc(N, sizeof(pipe_t))

    invece di malloc, si usa la calloc.

    La differenza e' minima: la parte interessante e' che la calloc inizializza il blocco di memoria a 0, mentre la malloc non fa nessuna inizializzazione (quindi leggermente piu' veloce, ma solo mooolto leggermente)
Devi accedere o registrarti per scrivere nel forum
5 risposte