PDA

Visualizza la versione completa : [C] Uso di "_" nelle variabili e ancora sui puntatori.


zaxis
22-11-2005, 19:41
Tre domande.

Una riguardo lo stile. Come si usa l'underscore in C?
variabili come _pippo e __pippo di solito vengono usate per dichiarazioni particolari?

Poi (puntatori)...

In alcuni listati che sto studiando ci sono delle funzioni che prendono come argomento dei puntatori a carattere, tipo

void pippo(char *a)

ma poi di fatto vedo che nelle chiamate vengono passate delle semplici stringhe, tipo

pippo("pasquale")

Mi potreste spiegare il perche'?

Infine:

In altri casi, ho visto delle funzioni che prendono anche loro stringhe come argomento, sono scritte diversamente:

void pippo(char* a)

Che differenza c'e' con quella sopra??

Grazie a tutti. Ho cercato queste cose sulle varie guide online, ma non lo spiegava nessuno, o forse lo spiegavano in maniera diversa da come mi si sono presentate, ed io non le ho viste...

Ciao!

oregon
22-11-2005, 21:43
Originariamente inviato da zaxis
Tre domande.

Una riguardo lo stile. Come si usa l'underscore in C?
variabili come _pippo e __pippo di solito vengono usate per dichiarazioni particolari?

Non esiste una regola definita per usare l'underscore.
Molti compilatori tuttavia, utilizzano la convenzione di utilizzare un underscore o due underscore anteposti a variabili di sistema.

Fossi in te, non mi soffermerei molto sull'argomento ...

Originariamente inviato da zaxis
Poi (puntatori)...

In alcuni listati che sto studiando ci sono delle funzioni che prendono come argomento dei puntatori a carattere, tipo

void pippo(char *a)

ma poi di fatto vedo che nelle chiamate vengono passate delle semplici stringhe, tipo

pippo("pasquale")

Mi potreste spiegare il perche'?


Semplicemente perche' una costante stringa (come "pasquale") e' rappresentata internamente da un puntatore a carattere.


Originariamente inviato da zaxis
Infine:

In altri casi, ho visto delle funzioni che prendono anche loro stringhe come argomento, sono scritte diversamente:

void pippo(char* a)

Che differenza c'e' con quella sopra??


Nessuna.

zaxis
22-11-2005, 22:31
Originariamente inviato da oregon


Semplicemente perche' una costante stringa (come "pasquale") e' rappresentata internamente da un puntatore a carattere.



Ma se dichiaro la funzione

void pippo (char a)

e' un errore? Dovrei scrivere qualcosa come

void pippo (char a[50])

???

oregon
22-11-2005, 22:51
Originariamente inviato da zaxis
Ma se dichiaro la funzione

void pippo (char a)

e' un errore?

Certo.

char a

vuol dire che puoi passare *un solo* carattere e non una stringa.


Originariamente inviato da zaxis
Dovrei scrivere qualcosa come

void pippo (char a[50])



Sì anche se la forma con il puntatore e' piu' flessibile in quanto indichi il passaggio di una stringa ma non ne limiti le dimensioni.

zaxis
22-11-2005, 23:29
Originariamente inviato da oregon

Sì anche se la forma con il puntatore e' piu' flessibile in quanto indichi il passaggio di una stringa ma non ne limiti le dimensioni.

Ahhh comincio a capire.
Poiche' la stringa e' un array, e poiche' quando passiamo un array alle funzioni in realta' passiamo la locazione in memoria del suo primo elemento, cioè un puntatore (scritto senza *) tanto vale dichiararla direttamente come puntatore.

Cioe, per vedere se ho capito.

void pippo(char a[50])

equivale a

void pippo(char &a[0])

e quindi in tutte le occorrende dentro la funzione pippo verra' usata la la locazione di memoria del primo elemento di a.

Allora, tanto vale dichiararla come

void pippo(char *a)

cosi', usando a (senza asterisco) all'interno della funzione, uso in effetti la locazione del suo primo elemento, esattamente come sopra...

Giusto?


Ma allora potrei anche scrivere

void pippo(char a[])

ma magari viene considerata meno elegante...o no?

Ciao!
e Grazie!

oregon
23-11-2005, 00:07
Sì ... giusto ...

Ciao

Loading