Oppure

Loading
16/10/18 20:11
AldoBaldo
Seguendo lo stesso ragionamento, anche con la seconda struttura è possibile questo:

#include <iostream>
#include <stdlib.h>
using namespace std;

struct a {
    int val1;
    int val2;
};

a *funx01( a *ptr ){ //funx01 è di tipo struct
    ptr->val1 = 12;
    ptr->val2 = 46;
    return ptr;
}

int main() {
    a c;

    funx01( &c );

    cout<<c.val1<<endl;
    cout<<c.val2<<endl;

    return 0;
}
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.
16/10/18 20:13
AldoBaldo
Seguendo lo stesso ragionamento, anche con la seconda struttura è possibile questo:

#include <iostream>
#include <stdlib.h>
using namespace std;

struct a {
    int val1;
    int val2;
};

a *funx01( a *ptr ){ //funx01 è di tipo struct
    ptr->val1 = 12;
    ptr->val2 = 46;
    return ptr;
}

int main() {
    a c;

    funx01( &c );

    cout<<c.val1<<endl;
    cout<<c.val2<<endl;

    return 0;
}
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.
16/10/18 20:38
AldoBaldo
Seguendo lo stesso ragionamento, anche con la seconda struttura è possibile questo:

#include <iostream>
#include <stdlib.h>
using namespace std;

struct a {
    int val1;
    int val2;
};

a *funx01( a *ptr ){ //funx01 è di tipo struct
    ptr->val1 = 12;
    ptr->val2 = 46;
    return ptr;
}

int main() {
    a c;

    funx01( &c );

    cout<<c.val1<<endl;
    cout<<c.val2<<endl;

    return 0;
}
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.
17/10/18 0:40
TheDarkJuster
Se vuoi ché la memoria sia liberata appena possibile puoi usare std::shared_ptr<>, o in questo caso std::unique_ptr<>.
aaa
17/10/18 7:23
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.
17/10/18 13:14
vale77777
mentre studiavo ho scoperto l'utilizzo della parolina magica 'static', penso si potrebbe anche scrivere:
#include <iostream>
#include <cstdlib>
using namespace std;

struct a
       {
    int val1;
    int val2;
       };

 struct a funx01() {
        //struct a *struttura = new struct a;
    static a struttura;//si può anche usare la forma sopra ma in quel caso
 // dovrei scrivere 'struct a funx01' e struttura diverrebbe un puntatore
        struttura.val1 = 12;
        struttura.val2 = 13;

        return struttura;
}


int main()
{
        struct a t = funx01();//se utilizzassi il metodo 
  //di cui si parla nel commento sopra dovrei scrivere 'struct a*t' e ti diverrebbe un puntatore

        cout << t.val1<<"\n";
        cout << t.val2<<"\n";



        return 0;
}


Ultima modifica effettuata da vale77777 17/10/18 13:17
aaa
17/10/18 14:23
AldoBaldo
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.