Quando dovrei usare virgolette singole e doppie tra virgolette nella programmazione C o C ++?
Quando dovrei usare virgolette singole e doppie tra virgolette nella programmazione C o C ++?
Risposte:
In C e in C ++ le virgolette singole identificano un singolo carattere, mentre le virgolette doppie creano una stringa letterale. 'a'
è un singolo un carattere letterale, mentre "a"
è un letterale stringa contenente un 'a'
e un terminatore null (ovvero un array di 2 caratteri).
In C ++ il tipo di carattere è letterale char
, ma si noti che in C il tipo di carattere è letterale int
, ovvero sizeof 'a'
4 in un'architettura in cui gli ints sono 32 bit (e CHAR_BIT è 8), mentre sizeof(char)
1 è ovunque.
Alcuni compilatori implementano anche un'estensione, che consente costanti multi-carattere. Lo standard C99 dice:
6.4.4.4p10: "Il valore di una costante di carattere intero contenente più di un carattere (ad es. 'Ab') o contenente un carattere o una sequenza di escape che non si associa a un carattere di esecuzione a byte singolo, è definito dall'implementazione. "
Potrebbe apparire così, ad esempio:
const uint32_t png_ihdr = 'IHDR';
La costante risultante (in GCC, che implementa questo) ha il valore che ottieni prendendo ogni carattere e spostandolo in alto, in modo che "I" finisca nei bit più significativi del valore a 32 bit. Ovviamente, non dovresti fare affidamento su questo se stai scrivendo codice indipendente dalla piattaforma.
Le virgolette singole sono caratteri ( char
), le virgolette doppie sono stringhe con terminazione null ( char *
).
char c = 'x';
char *s = "Hello World";
const char *
.
'x'
è un numero intero, che rappresenta il valore numerico della lettera x nel set di caratteri della macchina"x"
è una matrice di caratteri, lunga due caratteri, composta da ‘x’
seguita da‘\0’
Le virgolette singole sono per un singolo carattere. Le virgolette doppie sono per una stringa (matrice di caratteri). Puoi usare virgolette singole per creare una stringa di un carattere alla volta, se lo desideri.
char myChar = 'A';
char myString[] = "Hello Mum";
char myOtherString[] = { 'H','e','l','l','o','\0' };
Stavo cercando cose come: int cc = 'cc'; Succede che in pratica è una copia in byte di un intero. Quindi il modo di vederlo è che 'cc' che è fondamentalmente 2 c viene copiato in 2 byte inferiori dell'intero cc. Se stai cercando una curiosità, allora
printf("%d %d", 'c', 'cc'); would give:
99 25443
questo perché 25443 = 99 + 256 * 99
Quindi 'cc' è una costante multi-carattere e non una stringa.
Saluti
Le virgolette doppie sono per valori letterali stringa, ad esempio:
char str[] = "Hello world";
Le virgolette singole sono per letterali a carattere singolo, ad es .:
char c = 'x';
EDIT Come ha affermato David in un'altra risposta, il tipo di un personaggio è letterale int
.
char str[] = {'H','e','l','l','o'};
e nonstr
avresti un terminatore nullo.
str
non è una stringa (almeno, non una stringa in stile C, definita come NTBS).
char[]
(che la gente spesso definisce "stringhe") ha una terminazione nulla.
"hello" /*seamlessly connected to*/ "world"
. E questo può avere senso per i messaggi multilinea commentati.
In C virgolette singole come 'a' indicano costanti di caratteri mentre "a" è un array di caratteri, sempre terminato con il carattere 0
La virgoletta singola viene utilizzata per il carattere, mentre la virgoletta doppia viene utilizzata per la stringa.
printf("%c \n",'a');
printf("%s","Hello World");
un mondo Ciao
Se li hai usati viceversa e hai usato virgolette singole per stringa e virgolette doppie per carattere. Qui, questo sarà il risultato;
printf("%c \n","a");
printf("%s",'Hello World');
per la prima riga. Avrai un valore di Garbage o imprevisto. O potresti avere un output come questo ..
�
mentre per la seconda affermazione. Non vedrai nulla. Ancora una cosa. Se hai più dichiarazioni dopo questo. Inoltre non ti daranno alcun risultato.
Nota: il linguaggio PHP ti dà la flessibilità di usare facilmente virgolette singole e doppie.
Le virgolette singole indicano un carattere, il doppio indica una stringa.
In Java, è anche lo stesso.