Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - return di un array
Forum - C/C++ - return di un array - Pagina 2

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
AldoBaldo (Member)
Guru


Messaggi: 702
Iscritto: 08/01/2015

Segnala al moderatore
Postato alle 22:13
Martedì, 16/10/2018
Seguendo lo stesso ragionamento, anche con la seconda struttura è possibile questo:

Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2. #include <stdlib.h>
  3. using namespace std;
  4.  
  5. struct a {
  6.     int val1;
  7.     int val2;
  8. };
  9.  
  10. a *funx01( a *ptr ){ //funx01 è di tipo struct
  11.     ptr->val1 = 12;
  12.     ptr->val2 = 46;
  13.     return ptr;
  14. }
  15.  
  16. int main() {
  17.     a c;
  18.  
  19.     funx01( &c );
  20.  
  21.     cout<<c.val1<<endl;
  22.     cout<<c.val2<<endl;
  23.  
  24.     return 0;
  25. }



ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.
PM Quote
Avatar
AldoBaldo (Member)
Guru


Messaggi: 702
Iscritto: 08/01/2015

Segnala al moderatore
Postato alle 22:38
Martedì, 16/10/2018
Seguendo lo stesso ragionamento, anche con la seconda struttura è possibile questo:

Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2. #include <stdlib.h>
  3. using namespace std;
  4.  
  5. struct a {
  6.     int val1;
  7.     int val2;
  8. };
  9.  
  10. a *funx01( a *ptr ){ //funx01 è di tipo struct
  11.     ptr->val1 = 12;
  12.     ptr->val2 = 46;
  13.     return ptr;
  14. }
  15.  
  16. int main() {
  17.     a c;
  18.  
  19.     funx01( &c );
  20.  
  21.     cout<<c.val1<<endl;
  22.     cout<<c.val2<<endl;
  23.  
  24.     return 0;
  25. }



ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.
PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 2:40
Mercoledì, 17/10/2018
Se vuoi ché la memoria sia liberata appena possibile puoi usare std::shared_ptr<>, o in questo caso std::unique_ptr<>.

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6405
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 9:23
Mercoledì, 17/10/2018
Ovviamente per

std::shared_ptr<> e std::unique_ptr<>

devi avere chiari questi concetti.

Dato che ancora hai dubbi di base sul C, direi che è meglio un passo per volta.


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
vale77777 (Normal User)
Newbie


Messaggi: 15
Iscritto: 08/10/2018

Segnala al moderatore
Postato alle 15:14
Mercoledì, 17/10/2018
mentre studiavo ho scoperto l'utilizzo della parolina magica 'static', penso si potrebbe anche scrivere:
Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2. #include <cstdlib>
  3. using namespace std;
  4.  
  5. struct a
  6.        {
  7.     int val1;
  8.     int val2;
  9.        };
  10.  
  11.  struct a funx01() {
  12.         //struct a *struttura = new struct a;
  13.     static a struttura;//si può anche usare la forma sopra ma in quel caso
  14.  // dovrei scrivere 'struct a funx01' e struttura diverrebbe un puntatore
  15.         struttura.val1 = 12;
  16.         struttura.val2 = 13;
  17.  
  18.         return struttura;
  19. }
  20.  
  21.  
  22. int main()
  23. {
  24.         struct a t = funx01();//se utilizzassi il metodo
  25.   //di cui si parla nel commento sopra dovrei scrivere 'struct a*t' e ti diverrebbe un puntatore
  26.  
  27.         cout << t.val1<<"\n";
  28.         cout << t.val2<<"\n";
  29.  
  30.  
  31.  
  32.         return 0;
  33. }




Ultima modifica effettuata da vale77777 il 17/10/2018 alle 15:17
PM Quote
Avatar
AldoBaldo (Member)
Guru


Messaggi: 702
Iscritto: 08/01/2015

Segnala al moderatore
Postato alle 16:23
Mercoledì, 17/10/2018
Sì, tieni però presente che l'oggetto statico resta, in un certo senso, "legato" alla funzione in un'unica istanza, per cui ogni volta che chiami la funzione viene modificato. E' ben vero che nel programmino che ci hai proposto la cosa è ininfluente, visto che vengono sempre impostati gli stessi valori, però in un caso reale usare un oggetto statico presenta delle peculiarità delle quali è bene essere strettamente consapevoli -- ce n'è un'unica istanza per tutto il programma.


ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo