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++ - Pointers chiarimenti e differenze
Forum - C/C++ - Pointers chiarimenti e differenze

Avatar
osharko (Normal User)
Pro


Messaggi: 124
Iscritto: 16/04/2011

Segnala al moderatore
Postato alle 16:11
Lunedì, 13/06/2011
Salve da ieri ho iniziato a studiare i Pointers (puntatori, per chi lo voglia sapere dal libro C++ Primer Plus), ma purtroppo non ho capito bene cosa offrono e le differenze dalle semplici variabili:
vengono utilizzate per memorizzare un indirizzo di memoria, ma possono contenere anche un valore (mentre le variabili solo il valore);
però oltre a questo quale altra cosa può fare un Puntatore?

p.s. c'è un metodo per creare una propria struttura di dichiarazione con la quale si specifica a quanti Byte deve corrispondere la variabile dichiarata con il proprio tipo ti Dichiaratore?

PM Quote
Avatar
lumo (Member)
Expert


Messaggi: 449
Iscritto: 18/04/2010

Segnala al moderatore
Postato alle 16:21
Lunedì, 13/06/2011
Testo quotato

Postato originariamente da osharko:

Salve da ieri ho iniziato a studiare i Pointers (puntatori, per chi lo voglia sapere dal libro C++ Primer Plus), ma purtroppo non ho capito bene cosa offrono e le differenze dalle semplici variabili:
vengono utilizzate per memorizzare un indirizzo di memoria, ma possono contenere anche un valore (mentre le variabili solo il valore);
però oltre a questo quale altra cosa può fare un Puntatore?

p.s. c'è un metodo per creare una propria struttura di dichiarazione con la quale si specifica a quanti Byte deve corrispondere la variabile dichiarata con il proprio tipo ti Dichiaratore?



Hai fatto un bel po' di confusione.
Un puntatore E' una variabile a tutti gli effetti e contiene un indirizzo di memoria.
Il valore di un puntatore E' quell'indirizzo di memoria;
Codice sorgente - presumibilmente C/C++

  1. int a = 2;
  2. int* ptr = &a;
  3. printf("%d\n", *ptr );


quello che stampi è effettivamente il valore di a, solo che lo ottieni in modo diverso: invece di passare a direttamente, dereferenzi il puntatore contente il suo indirizzo( *ptr ).
Comunque all'inizio i puntatori non sono mai del tutto chiari soprattutto per gli impieghi, ma andando avanti vedrai che sono essenziali.

Riguardo alla seconda domanda invece non l'ho ben capita.

PM Quote
Avatar
osharko (Normal User)
Pro


Messaggi: 124
Iscritto: 16/04/2011

Segnala al moderatore
Postato alle 16:26
Lunedì, 13/06/2011
bhe allora:
-se dichiari una variabile di tipo char hai a disposizione 1 Byte di memoria;
-se dichiari una variabile di tipo int hai a disposizione 2/4 byte di memoria;
-se dichiari una variabile di tipo double hai a disposizione 8 byte di memoria;
-c'è per caso qualche istruzione/funzione per creare una mia istruzione di assegnazione con la quale specifico io quanti byte deve riservare?
tipo:
nuova istruzione di assegnazione col nome di TROUPLE e mette a disposizione 20 byte.
esiste qualcosa del genere?

PM Quote
Avatar
lumo (Member)
Expert


Messaggi: 449
Iscritto: 18/04/2010

Segnala al moderatore
Postato alle 17:08
Lunedì, 13/06/2011
Testo quotato

Postato originariamente da osharko:

bhe allora:
-se dichiari una variabile di tipo char hai a disposizione 1 Byte di memoria;
-se dichiari una variabile di tipo int hai a disposizione 2/4 byte di memoria;
-se dichiari una variabile di tipo double hai a disposizione 8 byte di memoria;
-c'è per caso qualche istruzione/funzione per creare una mia istruzione di assegnazione con la quale specifico io quanti byte deve riservare?
tipo:
nuova istruzione di assegnazione col nome di TROUPLE e mette a disposizione 20 byte.
esiste qualcosa del genere?



Codice sorgente - presumibilmente Plain Text

  1. TROUPLE a = 20;


solo che il compilatore ti darà l'errore "il tuo design fa schifo" :rotfl:
Quanti byte riservare lo decide il compilatore; se vuoi allocare tot byte di memoria devi usare malloc() e free() e... i puntatori.
Comunque non ho ancora capito il tuo scopo XD

PM Quote
Avatar
manvb.net (Member)
Guru


Messaggi: 663
Iscritto: 28/01/2008

Segnala al moderatore
Postato alle 17:11
Lunedì, 13/06/2011
Testo quotato

Postato originariamente da osharko:

bhe allora:
-se dichiari una variabile di tipo char hai a disposizione 1 Byte di memoria;
-se dichiari una variabile di tipo int hai a disposizione 2/4 byte di memoria;
-se dichiari una variabile di tipo double hai a disposizione 8 byte di memoria;
-c'è per caso qualche istruzione/funzione per creare una mia istruzione di assegnazione con la quale specifico io quanti byte deve riservare?
tipo:
nuova istruzione di assegnazione col nome di TROUPLE e mette a disposizione 20 byte.
esiste qualcosa del genere?



Puoi creare nuovi tipi di dato(vedi classi/strutture), ma se stai ancora studiando i puntatori è meglio che aspetti ad affrontare questi argomenti, rischi solo di incasinarti le idee!

PM Quote
Avatar
osharko (Normal User)
Pro


Messaggi: 124
Iscritto: 16/04/2011

Segnala al moderatore
Postato alle 17:27
Lunedì, 13/06/2011
va bene grazie mille,
il mio scopo era per fare potenze molto alte tipo
2^64 che nemmeno con long long double funge...
grazie mille comunque potete chiudere!

PM Quote
Avatar
lumo (Member)
Expert


Messaggi: 449
Iscritto: 18/04/2010

Segnala al moderatore
Postato alle 17:39
Lunedì, 13/06/2011
Testo quotato

Postato originariamente da osharko:

va bene grazie mille,
il mio scopo era per fare potenze molto alte tipo
2^64 che nemmeno con long long double funge...
grazie mille comunque potete chiudere!


allora ciò che cerchi è questo: http://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic
esistono librerie per gestire i bignum tipo GNU mp, solo che se non sai come funzionano i puntatori difficilmente riuscirai ad usarla :)

PM Quote