[C] array e return

di il
10 risposte

[C] array e return

Scusatemi ho un dubbio sugli array in questo caso array di array di char.
stavo studiando gli array e ho visto che gli array non possono ritornare da una funzione, ma provando a creare la situazione ho visto che questo non crea nessun tipo di problema.

esempio

char **funzione(char **array)

/* istruzioni */

return (array)
la funzione gira correttamente e fa quello che deve, quindi la domanda è questa: è corretto programmare una funzione nel seguente modo o ho letto male io la parte di teoria e si riferiva ad un altro concetto? grazie mille

10 Risposte

  • Re: [C] array e return

    A funzionare dovrebbe funzionare.
  • Re: [C] array e return

    Si funziona, ma questa è una cosa lecita nel linguaggio? è lecito far ritornare un array da una funzione? se puo' servire l ho utilizzato perchè all'interno alloco dinamicamente e ci eseguo delle istruzioni
  • Re: [C] array e return

    Secondo me non è tanto sicuro se l'array è dinamico, perché poi sei costretto a catturare il valore ritornato per non perderlo. Poi andrebbe gestita anche la sua lunghezza.
    Io metterei il puntatore in una struct, insieme a un intero per la dimensione, e la passerei per indirizzo.
  • Re: [C] array e return

    elite ha scritto:


    ma questa è una cosa lecita nel linguaggio? è lecito far ritornare un array da una funzione?

    @elite, il concetto e': SE compila, e' lecito.

    Tutto altro discorso e' se ha senso.
    Ma che qui' e' TUTTA questione di SAPERE quello che si fa.
    Per avere senso, ha sicuramente senso, MA serve conoscere anche TUTTO quello che c'e' attorno a tale scelta (in particolare TUTTA la questione della gestione della memoria, di chi alloca e di chi dealloca.)

    Nel caso specifico, NON BASTA ritornare l'array, MA SERVE SAPERE anche quanti elementi contiene, e tali informazioni NON DEVONO separarsi MAI.
  • Re: [C] array e return

    Quello che faccio è dichiarare un array di array di char nel main e passarlo alla funzione. A seconda delle scelte dell utente l array viene allocato dinamicamente o meno e poi restituito al chiamante. Inoltre per indirizzo è passato anche il numero delle "righe" che l utente vuole allocare cosi che ritorni anch'esso nel chiamante
  • Re: [C] array e return

    Potresti anche scrivere

    void funzione(char ***array)

    passando il puntatore al puntatore doppio
  • Re: [C] array e return

    Sisi, so che i due metodi sono equivalenti in linea generale, ma se lo sono anche in situazioni come questa appunto preferivo utilizzare una return a funzione per non avere puntatori ovunque
  • Re: [C] array e return

    No non ti ho capito
  • Re: [C] array e return

    Intendevo dire che se un metodo vale l'altro allora preferivo utilizzare una return a funzione invece di passare void funz(char ***...)
  • Re: [C] array e return

    È una tua preferenza ma non ci sono altri motivi...
Devi accedere o registrarti per scrivere nel forum
10 risposte