Одинарные кавычки против двойных кавычек в C или C++
Когда я должен использовать одинарные и двойные кавычки в программировании на C или C++?
15 ответов
В C и C++ одинарные кавычки идентифицируют один символ, а двойные кавычки создают строковый литерал. 'a'
является одним символьным литералом, в то время как "a"
строковый литерал, содержащий 'a'
и нулевой терминатор (это массив из 2 символов).
В C++ тип символьного литерала char
, но обратите внимание, что в C тип символьного литерала int
, то есть sizeof 'a'
равен 4 в архитектуре, где целые числа являются 32-битными (а CHAR_BIT равно 8), тогда как sizeof(char)
1 везде.
Некоторые компиляторы также реализуют расширение, которое допускает многосимвольные константы. Стандарт C99 гласит:
6.4.4.4p10: "Значение целочисленной символьной константы, содержащей более одного символа (например," ab "), или содержащей символ или escape-последовательность, которая не отображается на однобайтовый символ выполнения, определяется реализацией. "
Это может выглядеть так, например:
const uint32_t png_ihdr = 'IHDR';
Результирующая константа (в GCC, которая реализует это) имеет значение, которое вы получаете, беря каждый символ и сдвигая его вверх, так что "I" заканчивается в старших значащих битах 32-битного значения. Очевидно, вы не должны полагаться на это, если вы пишете независимый от платформы код.
Одинарные кавычки - это символы (char
), двойные кавычки - строки с нулевым символом в конце (char *
).
char c = 'x';
char *s = "Hello World";
'x'
является целым числом, представляющим числовое значение буквы x в наборе символов машины"x"
массив символов длиной два символа, состоящий из‘x’
с последующим‘\0’
Я возился с вещами вроде: int cc = 'cc'; Бывает, что это в основном побайтная копия целого числа. Следовательно, способ посмотреть на это состоит в том, что 'cc', который в основном равен 2 c, копируется в младшие 2 байта целого числа cc. Если вы ищете мелочи, то
printf("%d %d", 'c', 'cc'); would give:
99 25443
это потому что 25443 = 99 + 256*99
Таким образом, "cc" является многосимвольной константой, а не строкой.
ура
Одиночные кавычки предназначены для одного символа. Двойные кавычки для строки (массив символов). Вы можете использовать одинарные кавычки для создания строки по одному символу за раз, если хотите.
char myChar = 'A';
char myString[] = "Hello Mum";
char myOtherString[] = { 'H','e','l','l','o','\0' };
В C одинарные кавычки, такие как "a", указывают символьные константы, тогда как "a" - это массив символов, всегда заканчивающийся символом 0
Двойные кавычки предназначены для строковых литералов, например:
char str[] = "Hello world";
Одинарные кавычки предназначены для односимвольных литералов, например:
char c = 'x';
РЕДАКТИРОВАТЬ Как Дэвид заявил в другом ответе, тип литерала символа int
,
Одинарная кавычка используется для символа, а двойная кавычка используется для строки.
Например..
printf("%c \n",'a');
printf("%s","Hello World");
Выход
Привет Мир
Если вы использовали их в обратном случае и использовали одинарную кавычку для строки и двойную кавычку для символа. Здесь это будет результат;
printf("%c \n","a");
printf("%s",'Hello World');
выход:
для первой строки. У вас будет значение мусора или неожиданное. Или у вас может быть вывод как это..
пока для второго утверждения. Вы ничего не увидите. Еще одна вещь. Если у вас есть больше заявлений после этого. Они также не дадут вам никакого результата.
Примечание: язык PHP дает вам возможность легко использовать одинарные и двойные кавычки.
Используйте одинарную кавычку с одинарным символом как:
char ch = 'a';
Вот 'a'
является константой символа и равна ASCII
значение символа а.
Используйте двойные кавычки со строками как:
char str[] = "foo";
Вот "foo"
является строковым литералом.
Это нормально использовать "a"
но его нельзя использоватьfoo'
Одинарные кавычки обозначают символ, двойные обозначают строку.
В Java это также то же самое.
Хотя я уверен, что это не отвечает на то, что спросил первоначальный спрашивающий, на случай, если вы в конечном итоге найдете здесь одинарную кавычку в буквальных целых числах, как у меня ...
В C++14 добавлена возможность добавлять одинарные кавычки (
constexpr int oneBillion = 1'000'000'000;
constexpr int binary = 0b1010'0101;
constexpr int hex = 0x12'34'5678;
constexpr double p = 3.1415926535'8979323846'2643383279'5028841971'6939937510'5820974944;
другой способ объявить char/string
char char_simple = 'a'; // bytes 1 : -128 to 127 or 0 to 255
signed char char_signed = 'a'; // bytes 1: -128 to 127
unsigned char char_u = 'a'; // bytes 2: 0 to 255
// double quote is for string.
char string_simple[] = "myString";
char string_simple_2[] = {'m', 'S', 't', 'r', 'i', 'n', 'g'};
char string_fixed_size[8] = "myString";
char *string_pointer = "myString";
char string_poionter_2 = *"myString";
printf("char = %ld\n", sizeof(char_simple));
printf("char_signed = %ld\n", sizeof(char_signed));
printf("char_u = %ld\n", sizeof(char_u));
printf("string_simple[] = %ld\n", sizeof(string_simple));
printf("string_simple_2[] = %ld\n", sizeof(string_simple_2));
printf("string_fixed_size[8] = %ld\n", sizeof(string_fixed_size));
printf("*string_pointer = %ld\n", sizeof(string_pointer));
printf("string_poionter_2 = %ld\n", sizeof(string_poionter_2));
В C и C++ одинарные кавычки известны как символ ('a'), тогда как двойные кавычки известны как строка ("Hello"). Разница в том, что в символе может храниться что угодно, кроме одного алфавита / числа и т. Д. Строка может хранить что угодно. Но также помните, что существует разница между '1' и 1. Если вы наберете cout<< '1' << endl << 1; Результат будет таким же, но не в этом случае:
cout<<int('1')<<endl<<int(1);
На этот раз первая строка будет 48. Как и при преобразовании символа в int, он преобразуется в его ascii, а ascii для '1' - 48. То же самое, если вы это сделаете:
string s="Hi";
s+=48; //This will add "1" to the string
s+="1"; This will also add "1" to the string