Одинарные кавычки против двойных кавычек в 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' };
  1. single quote для character;
  2. double quote для string,

В 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
Другие вопросы по тегам