C++ e puntatori

di il
13 risposte

C++ e puntatori

Ciao ragazzi!!
sto studiando il c++ e ho bisogno di una mano, premetto che sto studiando da solo quindi potrei dire qualche boiata o peggio, fare.
sto studiando i puntatori e tutto quello che gli riguarda, volendo creare una funziona banale mi sono incastrato.

la mia funzione sarebbe:
- creo un array di 5 interi in una funzione;
- stampo il contenuto dell'array;
- punto l'array e il numero dei suoi elementi e li passo ad un altra funzione.
- in base alla regola per ogni tipo cambiano i byte da aggiungere o sottrarre per vedere l'elemento dell'array che segue o precede quello puntato. passando l'array alla funzione lui mi passa automaticamente l'indirizzo del primo carattere dell'array.
- una volta che ho scomposto l'array nell'altra funzione ne modifico un elemento.
- una volta modificato ristampo il contenuto dell'array e devo vederlo modificato invece è sempre uguale.

es:
1 definisco array di 5 interi;
2 stampo array originale.
3 modifico elemento dell array puntato chiamando un altra funzione passandogli l'indirizzo dell' array.
4 ristampo array modificato nella funzione dove l'ho definito.

io arrivo al punto dove bisogna scomporre l'array, quando lo modifico e lo ristampo mi stampa sempre e solo quello originale.
mi sto perdendo sicuramente qualche dettaglio riguardo i puntatori, chiedo a voi di darmi qualche delucidazione in merito.
grazie a tutti e scusate se ho scritto qualche boiata.
grazie mille a tutti!!!

13 Risposte

  • Re: C++ e puntatori

    Senza codice è un po' difficile capire dove sbagli
  • Re: C++ e puntatori

    enricoscarsissimo ha scritto:


    Senza codice è un po' difficile capire dove sbagli
    Tra poco posto il codice scusate
  • Re: C++ e puntatori

    Ragazzi, che dire, ho riscritto il codice da capo e ora fa quello che pensavo prima, l'ho scritto uguale ma sicuramente prima mi stavo perdendo via qualcosa.

    comunque il codice è questo:
    
    #include <iostream>
    #include <string>
    #include <iomanip>
    
    using namespace std;
    
    
    int scompongoarray(int dimensionearray, int * indirizzoarray) //scompongo l'array e modifico l'n elemento.
    {
    	//cout << "questo e' l'array scomposto:..\n";
    	for (int x = 0; x < dimensionearray; x++) //scompongo l'array
    	{
    		//cout << *indirizzoarray << endl;
    		if (*indirizzoarray == 3)
    		{
    			*indirizzoarray = 9; //modifico l'x elemento.
    		}
    
    		indirizzoarray++; //avanzo al prossimo elemento.
    	}
    }
    
    int creoarray()
    {
    	const int sizearray = 5; 
    	int static arrayoriginale[sizearray] = { 0, 1, 2, 3, 4 };
    	for (int a = 0; a < sizearray; a++)
    	{
    		cout << arrayoriginale[a] << endl;
    	}
    	
    	cout << "\n\n";
    
    	scompongoarray(sizearray, &arrayoriginale[0]);
    	for (int x = 0; x < sizearray; x++)
    	{
    		cout << arrayoriginale[x] << endl;
    	}
    
    }
    
    int main()
    {
    	creoarray();
    	system("PAUSE");
    	return 0;
    }
    
  • Re: C++ e puntatori

    Quindi hai risolto?
  • Re: C++ e puntatori

    oregon ha scritto:


    Quindi hai risolto?
    si grazie, mi era sfuggito sicuramente qualcosa prima, scusate la perdita di tempo ragazzi.
    secondo te è giusto modificare un elemento di un array da un altra funzione in quel modo?
  • Re: C++ e puntatori

    Non c'è un modo preciso per farlo. Avendo il puntatore puoi farlo come vuoi.

    Piuttosto non mi piace quell'array static dentro la funzione ... La funzione crea dovrebbe creare l'array dinamicamente e restituire il puntatore al nuovo array ma forse non l'hai ancora studiato.
  • Re: C++ e puntatori

    oregon ha scritto:


    Non c'è un modo preciso per farlo. Avendo il puntatore puoi farlo come vuoi.

    Piuttosto non mi piace quell'array static dentro la funzione ... La funzione crea dovrebbe creare l'array dinamicamente e restituire il puntatore al nuovo array ma forse non l'hai ancora studiato.
    sto studiando proprio queste cose. grazie mille dell'aiuto per fortuna c'è questo forum e persone come te.
    grazie ancora
  • Re: C++ e puntatori

    Curiosità..
    tu come lo scriveresti il codice che ho scritto io sopra? se hai voglia e se riesci a commentarlo mi faresti un gran favore.
    si impara sempre da chi ne sa di più giusto?
  • Re: C++ e puntatori

    No non ho tempo di farlo mi dispiace
  • Re: C++ e puntatori

    oregon ha scritto:


    No non ho tempo di farlo mi dispiace
    Ok quando hai tempo allora ricordati questo post per favore .
    Grazie mille
  • Re: C++ e puntatori

    Il CPP (rispetto al C) ha il concetto di REFERENCE. Con le reference usi i puntatori senza riferirti ad essi come tali. Mi spiego
    
    #include <iostream>
    #include <vector>
    
    using namespace std;
    
    void fai(vector<int> &v){ --da notare la dichiarazione
    v[0]+=1;
    
    }
    
    int main(){
    int a=12;
    vector<int> v; --una comoda classe del cpp che implementa la lista 'statica' (array è una lista collegata ma ha la stessa interfaccia di vector)
    
    v.push_back(a) -- inserisco il valore nel vettore
    cout<<v[0]<<endl;
    
    fai(v); --passo (per reference) il vettore
    
    cout<<v[0]<<endl;
    return 0
    }
    
    La morale è: le reference hanno lo stesso 'effetto' del passaggio per puntatori senza la scomodita di dover dereferenziare a mano.

    Un consiglio: se passi grandi moli di dati ma non devi operare su esse, fai i passaggi per const rerference (eviti la copia in memoria ma ricevi l'eccezione se provi a scrivere sulla 'reference' protetta.)
  • Re: C++ e puntatori

    DavideDaSerra ha scritto:


    Il CPP (rispetto al C) ha il concetto di REFERENCE. Con le reference usi i puntatori senza riferirti ad essi come tali. Mi spiego
    
    #include <iostream>
    #include <vector>
    
    using namespace std;
    
    void fai(vector<int> &v){ --da notare la dichiarazione
    v[0]+=1;
    
    }
    
    int main(){
    int a=12;
    vector<int> v; --una comoda classe del cpp che implementa la lista 'statica' (array è una lista collegata ma ha la stessa interfaccia di vector)
    
    v.push_back(a) -- inserisco il valore nel vettore
    cout<<v[0]<<endl;
    
    fai(v); --passo (per reference) il vettore
    
    cout<<v[0]<<endl;
    return 0
    }
    
    La morale è: le reference hanno lo stesso 'effetto' del passaggio per puntatori senza la scomodita di dover dereferenziare a mano.

    Un consiglio: se passi grandi moli di dati ma non devi operare su esse, fai i passaggi per const rerference (eviti la copia in memoria ma ricevi l'eccezione se provi a scrivere sulla 'reference' protetta.)
    Bell'esempio, era ciò che volevo fare ma fatto diversamente.
    Grazie anche dei commenti !! Grazie mille
  • Re: C++ e puntatori

    Prego... ho fatto caso solo adesso di aver commentato 'alla SQL'
Devi accedere o registrarti per scrivere nel forum
13 risposte