Одинарные кавычки против двойных кавычек в C или C ++ - PullRequest
179 голосов
/ 10 сентября 2010

Когда я должен использовать одинарные и двойные кавычки в программировании на C или C ++?

Ответы [ 12 ]

243 голосов
/ 10 сентября 2010

В C и C ++ одинарные кавычки обозначают один символ, а двойные кавычки создают строковый литерал. 'a' - это одиночный символьный литерал, а "a" - строковый литерал, содержащий 'a' и нулевой терминатор (то есть массив из 2 символов).

В C ++ тип символьного литерала равен char, но обратите внимание, что в C тип символьного литерала равен int, то есть sizeof 'a' равно 4 в архитектуре, где целые числа 32-битные (и CHAR_BIT 8), в то время как sizeof(char) везде 1.

41 голосов
/ 10 сентября 2010

Некоторые компиляторы также реализуют расширение, которое допускает многосимвольные константы.Стандарт C99 гласит:

6.4.4.4p10: «Значение целочисленной символьной константы, содержащей более одного символа (например,« ab »), или содержащей символ или escape-последовательность, которая несопоставление с однобайтовым символом выполнения, определяется реализацией. "

Это может выглядеть так, например:

const uint32_t png_ihdr = 'IHDR';

Результирующая константа (в GCC, котораяреализует это) имеет значение, которое вы получаете, беря каждый символ и сдвигая его вверх, так что «I» заканчивается в старших значащих битах 32-битного значения.Очевидно, вам не следует полагаться на это, если вы пишете независимый от платформы код.

23 голосов
/ 10 сентября 2010

Одинарные кавычки - это символы (char), двойные кавычки - это строки с нулем в конце (char *).

char c = 'x';
char *s = "Hello World";
13 голосов
/ 18 мая 2014
  • 'x' - это целое число, представляющее числовое значение буквы x в наборе символов машины
  • "x" - это массив символов длиной два символа, состоящий из ‘x’затем ‘\0’
8 голосов
/ 21 мая 2012

Я возился с такими вещами, как: int cc = 'cc'; Бывает, что это в основном побайтная копия целого числа. Следовательно, способ посмотреть на это состоит в том, что 'cc', который в основном равен 2 c, копируется в младшие 2 байта целого числа cc. Если вы ищете мелочи, то

printf("%d %d", 'c', 'cc'); would give:

99 25443

это потому что 25443 = 99 + 256 * 99

Так что 'cc' - это многосимвольная константа, а не строка.

Приветствия

8 голосов
/ 10 сентября 2010

Одинарные кавычки для одного символа.Двойные кавычки для строки (массив символов).Вы можете использовать одинарные кавычки для построения строки по одному символу за раз, если хотите.

char myChar     = 'A';
char myString[] = "Hello Mum";
char myOtherString[] = { 'H','e','l','l','o','\0' };
7 голосов
/ 10 сентября 2010
  1. single quote для character;
  2. double quote для string.
5 голосов
/ 10 сентября 2010

Двойные кавычки предназначены для строковых литералов, например:

char str[] = "Hello world";

Одинарные кавычки предназначены для односимвольных литералов, например:

char c = 'x';

EDIT Как заявил Дэвидв другом ответе тип символьного литерала равен int.

5 голосов
/ 10 сентября 2010

В C одинарные кавычки, такие как 'a', обозначают символьные константы, тогда как "a" - это массив символов, всегда заканчивающийся символом 0

3 голосов
/ 11 августа 2015

Одинарная кавычка используется для символа, а двойная кавычка используется для строки.

Например ..

 printf("%c \n",'a');
 printf("%s","Hello World");

выход

а Hello World

Если вы использовали их в обратном случае и использовали одинарную кавычку для строки и двойную кавычку для символа. Здесь это будет результат;

  printf("%c \n","a");
  printf("%s",'Hello World');

вывод:

для первой строки. У вас может быть значение мусора или неожиданное. Или у вас может быть такой вывод ..

пока для второго утверждения. Вы ничего не увидите. Еще одна вещь. Если у вас есть больше заявлений после этого. Они также не дадут вам никакого результата.

Примечание. Язык PHP позволяет легко использовать одинарные и двойные кавычки.

...