PDA

Visualizza la versione completa : [C++] Funzioni e Char con *


SkOrPiOn`87
18-01-2004, 04:59
Ciao, sto studiando da un po di tempo il c++ però non sono ancora riuscito a capire perchè i char utilizzano molto spesso questa sintassi:
char *variabile;

o la differenaza che ci sta tra dichiarare in una funzione l avriabili con * o senza, es:

void funzione(char *s, char c)
{
while(*s)
if (*s==c) return 1
else s++;
return 0;
}

io ho visto sul mio libro che utilizzza anche questo modo, ma quale differenza ci sta tra l'utilizzare l'una o l'altra?

Non essendoci l'esempio di chiamata, presumo che sia così funzione(&var, stringa), e che tutte le volte che la frase non è uguale scorre il puntatore in avanti alla ricerca della seconda frase.

Un'altra cosa che non ho capito è questa:
supponendo che io ho la variabile prova=3; e richiamo queste operazioni:

class prova;
int var = prova;
funzione(prova);

la parola PROVA in questo caso ha il valore scritto di prova o vale 3? nel caso valga 3 come dovrei fare per dirgli che io voglio che si chiami PROVA?

:ciauz:

Beziel
18-01-2004, 13:36
guarda il thread sui puntatori e capirai ;)

SkOrPiOn`87
18-01-2004, 13:48
Io ho già guardato i tread, ma non ho visto nessun articolo su quello, potresti darmi te il link?

:ciauz:

Grunt
18-01-2004, 16:55
Quando dichiari la variabile con * significa che stai dichiarando un puntatore, in pratica si usa per passare la variabile per indirizzo, infatti come puoi ben vedere nell'esempio che hai postato, incrementa il contenuto di *s all'interno della funzione. Se l'avessi passata per valore, fuori dalla funzione ti saresti ritrovata la variabile senza modifica.
Ovviamente, questa è solo una delle tantissime potenzialità dei puntatori, l'argomento non è semplice da potersi spiegare in 2 righe.

pixer
18-01-2004, 17:48
Originariamente inviato da Grunt
Ovviamente, questa è solo una delle tantissime potenzialità dei puntatori, l'argomento non è semplice da potersi spiegare in 2 righe. Concordo.

iguana13
19-01-2004, 16:38
Forse intendeva la differenza tra char come carattere e char * come stringa!

Se dichiari una variabile come char occupi la memoria per solo 1 byte:


char ch;
ch = 'A';


Se invece devi memorizzare una stringa, devi allocare la memoria per un insieme di caratteri, quindi un vettore.
Per passare quella stringa alla funzione ne devi passare il puntatore.
Esempio:


void f(char *str);

void main() {
// Dichiaro un array di caratteri per la stringa
char s[30];
// Chiamo la funzione
f(s);
}

void f (char *str) {
cout << str;
}


Noterai che per trattare le stringhe come array di caratteri hai molte limitazioni (come l'uso dello spazio in memoria e l'assegnamento tramite operatore =), quindi con il C++ è stata creata la classe string.

Nel tuo codice:


void funzione(char *s, char c)
{
while(*s)
if (*s==c) return 1
else s++;
return 0;
}


nell'istruzione "s++", NON incrementi il valore del carattere puntato da s, ma del suo puntatore!!

Per ulteriori info chiedi sulla discussione sui puntatori :ciauz:

SkOrPiOn`87
19-01-2004, 21:29
Intendevo proprio questo, grazie

ellecubo
19-01-2004, 21:50
in tutto questo non ti dimenticare dell esistenza della libreria string che non va mai gettata :ciauz:

string prova="ciao";

Grunt
20-01-2004, 00:23
nell'istruzione "s++", NON incrementi il valore del carattere puntato da s, ma del suo puntatore!!

Per ulteriori info chiedi sulla discussione sui puntatori :ciauz:
Non avevo letto bene la funzione.... credevo fosse il classico esempio degli interi che vengono incrementati all'interno delle funzioni. Chiedo scusa..... avevo letto..... (mi sa che stavo dormendo) *s++. :dhò: :dhò: :dhò:

Loading