View Full Version : domanda su C e puntatori
volevo chiedere, quali possono essere gli utilizzi dei puntatori?
a parte il potersi costruire il passaggio per riferimento non mi viene in mente niente.
(mannaggia a quando non è stato previsto il passaggio di parametri per riferimento)
senza puntatori come le implementi le strutture dati dinamiche come liste, alberi ecc.?
è veramente la prima cosa che mi viene in mente pensando ai puntatori, il passaggio di parametri secondo me è secondario in confronto.
l'allocazione dinamica della memoria ?
supertondo
10-09-2003, 20:54
anche i cicli for per esempio diventano più veloci
Ex
char str[80], *p;
p=str;
int i=0;
for(;*(p+i);++i) *(p+i)='c';:D :D :D
Originariamente inviato da supertondo
anche i cicli for per esempio diventano più veloci
Ex
char str[80], *p;
p=str;
int i=0;
for(;*(p+i);++i) *(p+i)='c';:D :D :D
ma il codice seguente è proprio così lento?
char str[80];
int i;
for(i=0;i<80;i++) str[i]='c';
E comunque uso una variabile in meno, risparmiando memoria, oltre ad avere un'istruzione in meno.
MauryWeb
10-09-2003, 22:30
Originariamente inviato da supertondo
anche i cicli for per esempio diventano più veloci
Ex
char str[80], *p;
p=str;
int i=0;
for(;*(p+i);++i) *(p+i)='c';:D :D :D
a scuola mi hanno insegnato che i moderni compilatori sono super ottimizzati e, anche se ti sbatti ad usare i puntatori al posto degli indici di un vettore la velocità di esecuzione è pressoché uguale...
poi... in fin dei conti... và a sapere:confused: :confused: :confused: :)
Beh allora se lo vuoi fare prorpio veloce:
char str[80], *p, *end;
p = str;
end = p + 80;
while(p!=end) *(p++) = 'c';
supertondo
11-09-2003, 18:26
Originariamente inviato da Killian
ma il codice seguente è proprio così lento?
char str[80];
int i;
for(i=0;i<80;i++) str[i]='c';
E comunque uso una variabile in meno, risparmiando memoria, oltre ad avere un'istruzione in meno.
Sul risparmio di memoria hai ragione ma se non si programmano centraline, celllari o cmq supporti con limitata RAM il metodo dei puntatori va bene per la velocità. Tiene presente che il computer meno potente ha ormai 128MB di RAM.
Dipende cosa voui fare in sostanza.:D :D :D
supertondo
11-09-2003, 18:27
Originariamente inviato da cionci
Beh allora se lo vuoi fare prorpio veloce:
char str[80], *p, *end;
p = str;
end = p + 80;
while(p!=end) *(p++) = 'c';
Non ci ho mai pensato. Complimenti.
:eek: :eek:
I puntatori servono (anzi sono obbligatori) anche per gli array multidimensionali senza limiti di dimensioni...
Velocità: ho constato che le operazioni matriciali (per esempio una moltiplicazioni tra 2 matrici) create con i puntatori sono più veloci delle stesse (con gli stessi dati) create come "statiche".
L'incremento di velocità è circa del 10 %...
Originariamente inviato da supertondo
Non ci ho mai pensato. Complimenti.
:eek: :eek:
Grazie ;)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.