Quando devo usar aspas simples e aspas duplas na programação C ou C ++?
Quando devo usar aspas simples e aspas duplas na programação C ou C ++?
Respostas:
Em C e em C ++, aspas simples identificam um único caractere, enquanto aspas duplas criam uma string literal. 'a'
é um literal de um caractere único, enquanto "a"
é um literal de cadeia de caracteres que contém um 'a'
terminador e um nulo (que é uma matriz de 2 caracteres).
Em C ++, o tipo de um literal de caractere é char
, mas observe que em C, o tipo de um literal de caractere é int
, isto sizeof 'a'
é, 4 em uma arquitetura em que as entradas são 32 bits (e CHAR_BIT é 8), enquanto sizeof(char)
é 1 em qualquer lugar.
Alguns compiladores também implementam uma extensão que permite constantes com vários caracteres. O padrão C99 diz:
6.4.4.4p10: "O valor de uma constante de caractere inteiro contendo mais de um caractere (por exemplo, 'ab'), ou contendo um caractere ou sequência de escape que não é mapeada para um caractere de execução de byte único, é definido pela implementação. "
Isso pode ser assim, por exemplo:
const uint32_t png_ihdr = 'IHDR';
A constante resultante (no GCC, que implementa isso) tem o valor que você obtém pegando cada caractere e alterando-o para que o 'I' acabe nos bits mais significativos do valor de 32 bits. Obviamente, você não deve confiar nisso se estiver escrevendo código independente da plataforma.
Aspas simples são caracteres ( char
), as aspas duplas são seqüências terminadas em nulo ( char *
).
char c = 'x';
char *s = "Hello World";
const char *
.
'x'
é um número inteiro, representando o valor numérico da letra x no conjunto de caracteres da máquina"x"
é uma matriz de caracteres, com dois caracteres, consistindo em ‘x’
seguido por‘\0’
Aspas simples são para um único caractere. Aspas duplas são para uma sequência (matriz de caracteres). Você pode usar aspas simples para criar uma string, um caractere de cada vez, se desejar.
char myChar = 'A';
char myString[] = "Hello Mum";
char myOtherString[] = { 'H','e','l','l','o','\0' };
Eu estava bisbilhotando coisas como: int cc = 'cc'; Acontece que é basicamente uma cópia em bytes para um número inteiro. Portanto, a maneira de ver é que 'cc', que é basicamente 2 c, é copiado para diminuir 2 bytes do número inteiro cc. Se você estiver procurando por curiosidades,
printf("%d %d", 'c', 'cc'); would give:
99 25443
isso ocorre porque 25443 = 99 + 256 * 99
Portanto, 'cc' é uma constante de vários caracteres e não uma string.
Felicidades
Aspas duplas são para literais de string, por exemplo:
char str[] = "Hello world";
Aspas simples são para literais de um caractere, por exemplo:
char c = 'x';
EDITAR Como David afirmou em outra resposta, o tipo de um caractere literal é int
.
char str[] = {'H','e','l','l','o'};
, e str
que não possui um terminador nulo.
str
não é uma cadeia de caracteres (pelo menos, não é uma cadeia de estilo C, definida como NTBS).
char[]
(do qual as pessoas costumam chamar de "strings") é nulo.
"hello" /*seamlessly connected to*/ "world"
. E isso pode fazer sentido para mensagens multilinhas comentadas.
Em C aspas simples como 'a' indicam constantes de caracteres, enquanto "a" é uma matriz de caracteres, sempre terminada com o caractere 0
Aspas simples são usadas para caracteres, enquanto as aspas duplas são usadas para string.
printf("%c \n",'a');
printf("%s","Hello World");
um Olá Mundo
Se você os usou no caso vice-versa e usou aspas simples para string e aspas duplas para caractere. Aqui, isso será resultado;
printf("%c \n","a");
printf("%s",'Hello World');
para a primeira linha. Você terá um valor de lixo ou inesperado. ou poderá ter uma saída como esta ..
enquanto para a segunda declaração. Você não verá nada. Mais uma coisa. Se você tiver mais declarações após isso. Eles também não lhe darão resultado.
Nota: A linguagem PHP oferece flexibilidade para usar aspas simples e duplas com facilidade.
Aspas simples estão indicando um caractere, e duas vezes uma string.
Em Java, também é o mesmo.
Use aspas simples com caracteres simples como:
char ch = 'a';
aqui 'a'
é um caractere constante e é igual aoASCII
valor de char a.
Use aspas duplas com cadeias de caracteres como:
char str[] = "foo";
aqui "foo"
está uma string literal.
Não há problema em usar, "a"
mas não em uso 'foo'