|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#21 | |
|
Senior Member
Iscritto dal: Apr 2003
Messaggi: 16462
|
Quote:
Forse la differenza non ti risulta chiara, ecco un altro piccolo esempio la stampa del numero piu' grande tra 2 numeri. Codice:
int a, b ;
if (a>b) printf("%d", a); else printf("%d",b)
Codice:
int a,b ;
printf("%d", (a>b) ? a : b) ;
__________________
MICROSOFT : Violating your privacy is our priority Ultima modifica di goldorak : 12-05-2009 alle 13:02. |
|
|
|
|
|
|
#22 |
|
Senior Member
Iscritto dal: Sep 2003
Messaggi: 9434
|
ora l'ho capito l'utilizzo del operatore ternario
non avevo capito che "%c" Codice:
indica alla funzione printf come devono essere interpretati i parametri che verranno stampati sullo schermo. In questo caso il "%c" indica che il valore di ritorno dell'espressione ? : va trattata come un carattere.
__________________
1)P4 2.4-Asrock p4i65- Sapphire Hd3450 512mb agp- 2GB ddr400-Hd 80gb WD- Thermaltake Litepower 450W 2)Amd 3200-Msi K8n Neo4 Platinum - 2*512 MB pc3200-Asus N6600gt- HD WD 160GB-enermax noisetacker 370. |
|
|
|
|
|
#23 |
|
Senior Member
Iscritto dal: Dec 2003
Messaggi: 4907
|
|
|
|
|
|
|
#24 |
|
Senior Member
Iscritto dal: Sep 2003
Messaggi: 9434
|
quindi
c carattere d numero ok tutto chiaro , tutto nuovo per me , ma tutto chiaro grazie
__________________
1)P4 2.4-Asrock p4i65- Sapphire Hd3450 512mb agp- 2GB ddr400-Hd 80gb WD- Thermaltake Litepower 450W 2)Amd 3200-Msi K8n Neo4 Platinum - 2*512 MB pc3200-Asus N6600gt- HD WD 160GB-enermax noisetacker 370. |
|
|
|
|
|
#25 |
|
Senior Member
Iscritto dal: Dec 2003
Messaggi: 4907
|
|
|
|
|
|
|
#26 | |
|
Senior Member
Iscritto dal: Apr 2003
Messaggi: 16462
|
Quote:
E poi il c e' un linguaggio semplice (forse troppo semplice ) e si impara alla svelta.
__________________
MICROSOFT : Violating your privacy is our priority |
|
|
|
|
|
|
#27 |
|
Senior Member
Iscritto dal: Dec 2003
Messaggi: 4907
|
Conoscere si. Utilizzare assolutamente no (a meno di non avere una validissima ragione).
|
|
|
|
|
|
#28 |
|
Senior Member
Iscritto dal: Sep 2003
Messaggi: 9434
|
ragazzi alla domanda: che differenza passa tra un puntatore a pippo e un riferimento a pippo?
il puntatore contiene l'indirizzo della variabile pippo Codice HTML:
int *ptr=&pippo; Codice:
int *ptr; ptr=&pippo Codice:
&rif=pippo;
__________________
1)P4 2.4-Asrock p4i65- Sapphire Hd3450 512mb agp- 2GB ddr400-Hd 80gb WD- Thermaltake Litepower 450W 2)Amd 3200-Msi K8n Neo4 Platinum - 2*512 MB pc3200-Asus N6600gt- HD WD 160GB-enermax noisetacker 370. |
|
|
|
|
|
#29 |
|
Senior Member
Iscritto dal: Apr 2003
Messaggi: 16462
|
Un puntatore e' una variabile, un riferimento e' soltanto un alias.
Per riprendere il tuo esempio : Codice:
int *ptr; ptr=&pippo p e' un puntatore inizializzato con l'indirizzo della variable pippo. Se poi piu' in la nel codice faccio ptr++, incremento il valore della variable ptr (non il valore di pippo). Certo incrementando ptr lo faccio puntare da qualche parte in memoria (e se cerco di dereferenziarlo nel 99,99% dei casi ottengo il crash dell'applicazione). Se invece usi Codice:
&rif=pippo; Codice:
int pippo = 3 ; int &rif = pippo ; rif++ // a questo punto pippo vale 4 Codice:
int *ptr;
int pippo = 3
ptr=&pippo ;
ptr++; //ptr non punta piu' a pippo ma da qualche parte in memoria
// pippo vale sempre 3
*ptr ; //ottengo sicuramente un crash
__________________
MICROSOFT : Violating your privacy is our priority |
|
|
|
|
|
#30 | |
|
Senior Member
Iscritto dal: Sep 2003
Messaggi: 9434
|
grazie tutto molto chiaro
tranne alcuni punti (quando si utilizza il termine deferenziare e alias vado in tilt Quote:
__________________
1)P4 2.4-Asrock p4i65- Sapphire Hd3450 512mb agp- 2GB ddr400-Hd 80gb WD- Thermaltake Litepower 450W 2)Amd 3200-Msi K8n Neo4 Platinum - 2*512 MB pc3200-Asus N6600gt- HD WD 160GB-enermax noisetacker 370. |
|
|
|
|
|
|
#31 | |
|
Senior Member
Iscritto dal: Apr 2003
Messaggi: 16462
|
Quote:
Diciamo che un riferimento non e' altro che un puntatore costante. Quindi si, rif contiene l'indirizzo di pippo, ma ogni volta che usi rif, il sistema implicitamente deferenzia rif per darti il valore di pippo. E siccome rif e' un puntatore costante, fare rif++ non cambia il valore di rif, ma quello della variable di cui rif e' riferimento. Quindi rif++ va inteso (va inteso nel senso che ogni volta che fai rif++ il sistema lo trasforma in) *rif++.
__________________
MICROSOFT : Violating your privacy is our priority |
|
|
|
|
|
|
#32 |
|
Senior Member
Iscritto dal: Sep 2003
Messaggi: 9434
|
se puoi mi potresti fare un esempio semplice della frase in grassetto
__________________
1)P4 2.4-Asrock p4i65- Sapphire Hd3450 512mb agp- 2GB ddr400-Hd 80gb WD- Thermaltake Litepower 450W 2)Amd 3200-Msi K8n Neo4 Platinum - 2*512 MB pc3200-Asus N6600gt- HD WD 160GB-enermax noisetacker 370. |
|
|
|
|
|
#33 | |
|
Senior Member
Iscritto dal: Apr 2003
Messaggi: 16462
|
Quote:
Dunque quello che devi capire e' come viene implementato il concetto di riferimento in c++. Quando scrivi Codice:
int pippo=4; int &rif = pippo ; Il sistema fa in modo che ogni volta che tu scrivi rif, oppure rif++ oppure rif-- etc... questo viene trasformato in rispettivamente (*rif) oppure (*rif)++ oppure (*rif)--. Il che fa senso poiche' rif dal punto di vista del sistema non e' altro che un puntatore (un puntatore costante) e quindi per accedere al valore di pippo devi(1) deferenziare rif. (1) il devi qui e' fatto dal sistema, non dall'utente.
__________________
MICROSOFT : Violating your privacy is our priority Ultima modifica di goldorak : 14-05-2009 alle 14:07. |
|
|
|
|
|
|
#34 |
|
Senior Member
Iscritto dal: Sep 2003
Messaggi: 9434
|
quindi con la parola deferenziare intendiamo ciò che il c++ fa lui solo, quindi mai nessuno mi potrà dire "dererenzia questo e quello"
il problema più che altro è capire con alias (che ora ho capito) e con la parola deferenziare cosa si intende
__________________
1)P4 2.4-Asrock p4i65- Sapphire Hd3450 512mb agp- 2GB ddr400-Hd 80gb WD- Thermaltake Litepower 450W 2)Amd 3200-Msi K8n Neo4 Platinum - 2*512 MB pc3200-Asus N6600gt- HD WD 160GB-enermax noisetacker 370. |
|
|
|
|
|
#35 | |
|
Senior Member
Iscritto dal: Apr 2003
Messaggi: 16462
|
Quote:
Deferenziare una variable p di tipo puntatore significa accedere al valore della variable il cui indirizzo sta in p. Chiaramoci su un punto importante, una variable di tipo puntatore si puo' sempre deferenziare, il punto e' che con i riferimenti e' il sistema stesso che dereferenzia in automatico, mentre se tu usassi una variable puntatore normale (non un riferimento) il compito di deferenziare spetterebbe al programmatore.
__________________
MICROSOFT : Violating your privacy is our priority |
|
|
|
|
|
|
#36 | |
|
Senior Member
Iscritto dal: Sep 2003
Messaggi: 9434
|
Quote:
ok credo di aver capito ora ci ragiono un pò su ma con questo tuo ultimo intervento chiarissimo ,si sono aperte diverse porte mentali grazie
__________________
1)P4 2.4-Asrock p4i65- Sapphire Hd3450 512mb agp- 2GB ddr400-Hd 80gb WD- Thermaltake Litepower 450W 2)Amd 3200-Msi K8n Neo4 Platinum - 2*512 MB pc3200-Asus N6600gt- HD WD 160GB-enermax noisetacker 370. |
|
|
|
|
|
|
#37 |
|
Senior Member
Iscritto dal: Sep 2003
Messaggi: 9434
|
ciao a tutti ragazzi
mi dareste una mano per far girare questo programma? da quello che ho capito ci sono tanti diversi programmi che devono collegarsi insieme tra loro, ma non so come? forse è un problema di eclipsE? Codice:
/ricavi.h
//definizione della classe ricavi
//le funzioni membro definite in ricavi.cpp
#ifndef ricavi
#define ricavi
class ricavipersona{
public:
ricavipersona(); //costruttore
void immettiricavi (); //input dei ricavi mensili
void impostaricavi (int,double); //input ricavi di 1 mese
void stamparicaviannuali ();
private:
double totalericaviannuali(); //funzioni di utilità
double ricavi[12]; //i 12 ricavi mensili
};
#endif
#include <iostream>
#include <iomanip>
#include <ricavi>
using namespace std;
//il costruttore inizializza l'array
ricavipersona::ricavipersona()
{
for(int i=0;i<12;i++)
ricavi[i]=0;
}
//per immettere i 12 ricavi mensili
void ricavipersona::immettiricavi()
{
double ricavifigura;
for (int i =0; i<12;i++)
{
cout<<"immetti ricavo per il mese"<<i+1<<";";
cin>>ricavifigura;
impostaricavi(i,ricavifigura);
}
}
//funzione per impostare uno dei 12 ricavi mensili
void ricavipersona::impostaricavi (int mese, double somma)
{
if (mese>=0 && mese<12 && somma>0)
ricavi[mese]=somma;
else
cout<<"mese o ricavifigura scorretto"<<endl;
}
//visualizzoil totale di vendita in un anno
void ricavipersona::stamparicaviannuali()
{cout<<"\n ricavi annuali totali sono: "<<totalericaviannuali()<<endl;
}
//funzione di utilità private per il calcolo del
//totale di vendita
double ricavipersona::totalericaviannuali()
{
double totale=0;
for (int i=0;i<12;i++)
totale + = ricavi[i];
return totale;
}
//mostra funzione di utilità
//da compilare con ricavi.cpp
#include <iostream>
#include "ricavi"
int main ()
{ricavipersona s; //crea oggetto ricavi persona s
s.immettiricavi ();
s.stamparicaviannuali();
return 0;
}
sul libro da cui sto studiano c'è scritto, consulatare la documentazione del vostyro compilatore per sapere come compilare ed effettuare il linking dei programmi composti da più file sorgenti....ma non so da dove cominciare ne cercare
__________________
1)P4 2.4-Asrock p4i65- Sapphire Hd3450 512mb agp- 2GB ddr400-Hd 80gb WD- Thermaltake Litepower 450W 2)Amd 3200-Msi K8n Neo4 Platinum - 2*512 MB pc3200-Asus N6600gt- HD WD 160GB-enermax noisetacker 370. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:31.












) e si impara alla svelta.








