Oppure

Loading
12/06/10 9:34
Sul mio libro sono spiegati ma non troppo bene (o meglio forse non capisco io !) e quindi sono venuto per farmi chiarire un po l'idee ... Dei puntatori ho capito quasi tutto tranne una cosa: i vettori di puntatori.

Che differenza ci sono in questi pezzi di codice ?


char *suit[4] = {"cuori", "quadri", "fiori", "picche"}

con questo
char suit[4] = {"cuori", "quadri", "fiori", "picche"}


altri due:

char string[] = {"ciao"}

con questo
char *string = "ciao"


Ultima domanda: c'è differenza tra gli apici ' e i doppi apici " ?

Edit: Ho corretto gli errori di distrazione :om:
Ultima modifica effettuata da 12/06/10 11:08
12/06/10 9:58
nessuno
Postato originariamente da Pitagora:
Che differenza ci sono in questi pezzi di codice ?


int *suit[4] = {"cuori", "quadri", "fiori", "picche"}


suit è un vettore di puntatori a valori interi. L'inizializzazione è sbagliata in quanto dovrebbe essere un vettore di puntatori a char, ovvero

char *suit[4] = {"cuori", "quadri", "fiori", "picche"};


In questo caso

int suit[4] = {"cuori", "quadri", "fiori", "picche"}


hai solamente un vettori di valori interi. Anche questa inizializzazione, a maggior ragione, è sbagliata ... potrebbe essere

int suit[4] = {1, 2, 3, 4};



Questa

char string[] = {'ciao']


è tutta sbagliata ... sia per la ] finale, sia per il fatto che utilizzi i singoli apici ' per racchiudere una stringa costante (dovresti usare le virgolette " ... " )
Se fosse stata scritta

char string[] = {"ciao"};

o anche così

char string[] = "ciao";

avresti avuto un vettore in memoria inizializzato con il dato tra virgolette.

con questo
char *string = "ciao"


In questo modo, dichiari un puntatore ad una stringa costante. L'area della stringa non è modificabile (in quanto costante).

Ultima domanda: c'è differenza tra gli apici ' e i doppi apici " ?

Ovviamente ... il singolo apice è usato per racchiudere un dato di tipo char, ad esempio

'A'

rappresenta solamente un byte con il codice ASCII del carattere indicato, mentre le virgolette sono usate per racchiudere delle costanti di tipo vettore di char, ad esempio

"ciao"

indica che esiste in memoria un vettore di caratteri terminati da zero binario ovvero una zona di memoria che contiene

c i a o Postato originariamente da Pitagora:
Che differenza ci sono in questi pezzi di codice ?


int *suit[4] = {"cuori", "quadri", "fiori", "picche"}


suit è un vettore di puntatori a valori interi. L'inizializzazione è sbagliata in quanto dovrebbe essere un vettore di puntatori a char, ovvero

char *suit[4] = {"cuori", "quadri", "fiori", "picche"};


In questo caso

int suit[4] = {"cuori", "quadri", "fiori", "picche"}


hai solamente un vettori di valori interi. Anche questa inizializzazione, a maggior ragione, è sbagliata ... potrebbe essere

int suit[4] = {1, 2, 3, 4};



Questa

char string[] = {'ciao']


è tutta sbagliata ... sia per la ] finale, sia per il fatto che utilizzi i singoli apici ' per racchiudere una stringa costante (dovresti usare le virgolette " ... " )
Se fosse stata scritta

char string[] = {"ciao"};

o anche così

char string[] = "ciao";

avresti avuto un vettore in memoria inizializzato con il dato tra virgolette.

con questo
char *string = "ciao"


In questo modo, dichiari un puntatore ad una stringa costante. L'area della stringa non è modificabile (in quanto costante).

Ultima domanda: c'è differenza tra gli apici ' e i doppi apici " ?

Ovviamente ... il singolo apice è usato per racchiudere un dato di tipo char, ad esempio

'A'

rappresenta solamente un byte con il codice ASCII del carattere indicato, mentre le virgolette sono usate per racchiudere delle costanti di tipo vettore di char, ad esempio

"ciao"

indica che esiste in memoria un vettore di caratteri terminati da zero binario ovvero una zona di memoria che contiene

c i a o {parsed_message}

Comunque, dalle domande che hai fatto, penso che le tue lacune non si fermino solamente ai puntatori ... dovresti rivedere *bene* i tipi di dati trattati dal C.

Comunque, dalle domande che hai fatto, penso che le tue lacune non si fermino solamente ai puntatori ... dovresti rivedere *bene* i tipi di dati trattati dal C.
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
12/06/10 10:39
grazie. Scusa per gli errori (int - char e ] - }) ma andavo di fretta. Oltre alla correzione non mi hai spiegato la differenza tra i primi 2 esempi ... :_doubt: Ti sei soffermato nel dire:
suit è un vettore di puntatori a valori interi grazie ma questo lo sapevo :heehee:

un altro dubbio che mi è sorto:
char *string = "ciao"
sarebbe in realtà così giusto ? c i a o grazie. Scusa per gli errori (int - char e ] - }) ma andavo di fretta. Oltre alla correzione non mi hai spiegato la differenza tra i primi 2 esempi ... :_doubt: Ti sei soffermato nel dire:
suit è un vettore di puntatori a valori interi grazie ma questo lo sapevo :heehee:

un altro dubbio che mi è sorto:
char *string = "ciao"
sarebbe in realtà così giusto ? c i a o {parsed_message}
lo stesso sarebbe di questo:
char string[] = {"ciao"}
sarebbe in realtà così giusto ? c i a o {parsed_message}

La differenza tra i due sarebbe che il primo è costante e non può essere modificato. Il secondo invece è variabile e può essere modificato. (quello che è stato scritto da nessuno^)

quindi
*(string + 1) 
sarebbe uguale a i giusto ?
lo stesso sarebbe di questo:
char string[] = {"ciao"}
sarebbe in realtà così giusto ? c i a o grazie. Scusa per gli errori (int - char e ] - }) ma andavo di fretta. Oltre alla correzione non mi hai spiegato la differenza tra i primi 2 esempi ... :_doubt: Ti sei soffermato nel dire:
suit è un vettore di puntatori a valori interi grazie ma questo lo sapevo :heehee:

un altro dubbio che mi è sorto:
char *string = "ciao"
sarebbe in realtà così giusto ? c i a o {parsed_message}
lo stesso sarebbe di questo:
char string[] = {"ciao"}
sarebbe in realtà così giusto ? c i a o {parsed_message}

La differenza tra i due sarebbe che il primo è costante e non può essere modificato. Il secondo invece è variabile e può essere modificato. (quello che è stato scritto da nessuno^)

quindi
*(string + 1) 
sarebbe uguale a i giusto ?

La differenza tra i due sarebbe che il primo è costante e non può essere modificato. Il secondo invece è variabile e può essere modificato. (quello che è stato scritto da nessuno^)

quindi
*(string + 1) 
sarebbe uguale a i giusto ?
Ultima modifica effettuata da 12/06/10 10:54
12/06/10 10:55
nessuno
Postato originariamente da Pitagora:
non mi hai spiegato la differenza tra i 4 esempi


Forse non l'hai letta o capita ...

Ti sei soffermato nel dire:
suit è un vettore di puntatori a valori interi grazie ma questo lo sapevo :heehee:


Scusa ma se veramente lo sapevi, come mai l'hai inizializzato con una lista di costanti stringa? Forse non sai esattamente cosa sia un vettore di puntatore ad interi, ecco perché te l'ho ricordato ...

sarebbe in realtà così giusto ? c i a o
Postato originariamente da Pitagora:
non mi hai spiegato la differenza tra i 4 esempi


Forse non l'hai letta o capita ...

Ti sei soffermato nel dire:
suit è un vettore di puntatori a valori interi grazie ma questo lo sapevo :heehee:


Scusa ma se veramente lo sapevi, come mai l'hai inizializzato con una lista di costanti stringa? Forse non sai esattamente cosa sia un vettore di puntatore ad interi, ecco perché te l'ho ricordato ...

sarebbe in realtà così giusto ? c i a o {parsed_message}


In memoria sì ... come ti ho detto già, il primo è un vettore che potrai modificare, il secondo è un puntatore ad un vettore di dati costanti.

quindi
Codice sorgente
*(string + 1)
sarebbe uguale a i giusto ?




In tutte queste tue domande, comunque, non sono quasi mai entrati i

vettori di puntatori

che avevi messo come titolo del thread ...


In memoria sì ... come ti ho detto già, il primo è un vettore che potrai modificare, il secondo è un puntatore ad un vettore di dati costanti.

quindi
Codice sorgente
*(string + 1)
sarebbe uguale a i giusto ?




In tutte queste tue domande, comunque, non sono quasi mai entrati i

vettori di puntatori

che avevi messo come titolo del thread ...
Ultima modifica effettuata da nessuno 12/06/10 11:06
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
12/06/10 11:08
l'unico mio dubbio sono questi adesso:

char *suit[4] = {"cuori", "quadri", "fiori", "picche"}


char suit[4] = {"cuori", "quadri", "fiori", "picche"}

12/06/10 11:15
nessuno
Postato originariamente da Pitagora:

l'unico mio dubbio sono questi adesso:

char *suit[4] = {"cuori", "quadri", "fiori", "picche"}


char suit[4] = {"cuori", "quadri", "fiori", "picche"}



Solo la prima è una dichiarazione di un vettore di puntatori a char (precisamente 4 puntatori a quelle stringhe indicate nell'inizializzazione).

La seconda è la dichiarazione di un semplice vettore di char e dovrebbe essere inizializzato così

char suit[4] = {'a', 'b', 'c', 'd'}

Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
12/06/10 12:02
Postato originariamente da nessuno:


Solo la prima è una dichiarazione di un vettore di puntatori a char (precisamente 4 puntatori a quelle stringhe indicate nell'inizializzazione).

La seconda è la dichiarazione di un semplice vettore di char e dovrebbe essere inizializzato così

char suit[4] = {'a', 'b', 'c', 'd'}



potresti farmi l'esempio con i valori che ti ho dato ?
Ultima modifica effettuata da 12/06/10 12:06
12/06/10 12:07
nessuno
Di quali valori parli? Che esempio?
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.