Коли я повинен використовувати одинарні та подвійні лапки в програмуванні на C або C ++?
Коли я повинен використовувати одинарні та подвійні лапки в програмуванні на C або C ++?
Відповіді:
У C і C ++ одиничні лапки ідентифікують один символ, тоді як подвійні лапки створюють рядковий буквал. 'a'
є одинарним літеральним символом, в той час "a"
як літеральним рядком, що містить 'a'
і нульовий термінатор (це масив з 2 знаків).
У C ++ тип буквеного символу є char
, але зауважте, що в C тип літерального символу є int
, тобто sizeof 'a'
4 в архітектурі, де ints є 32-бітовими (а CHAR_BIT - 8), тоді sizeof(char)
як 1 скрізь.
Деякі компілятори також реалізують розширення, яке дозволяє константи з кількома символами. Стандарт C99 говорить:
6.4.4.4p10: "Значення цілої константи символів, що містить більше одного символу (наприклад, 'ab') або містить символьну або послідовну послідовність символів, яка не відображається на однобайтовий символ виконання, визначається реалізацією. "
Це може виглядати приблизно так:
const uint32_t png_ihdr = 'IHDR';
Отримана константа (у GCC, яка реалізує це) має значення, яке ви отримуєте, беручи кожен символ і зміщуючи його вгору, так що "Я" виявляється в найбільш значущих бітах 32-бітного значення. Очевидно, ви не повинні покладатися на це, якщо ви пишете незалежний код платформи.
Одиничні лапки - це символи ( char
), подвійні лапки - це рядки з нульовим завершенням ( char *
).
char c = 'x';
char *s = "Hello World";
const char *
.
Одиночні лапки призначені для одного символу. Подвійні лапки призначені для рядка (масив символів). Ви можете використовувати окремі лапки, щоб створити рядок по одному символу за раз, якщо вам подобається.
char myChar = 'A';
char myString[] = "Hello Mum";
char myOtherString[] = { 'H','e','l','l','o','\0' };
Я роздумував такі речі, як: int cc = 'cc'; Буває, що це в основному байтова копія до цілого числа. Отже, спосіб дивитися на це полягає в тому, що 'cc', який в основному становить 2 c, копіюється на нижчі 2 байти цілого cc. Якщо ви шукаєте дрібниці, то
printf("%d %d", 'c', 'cc'); would give:
99 25443
це тому, що 25443 = 99 + 256 * 99
Отже, "cc" - це константа багато символів, а не рядок.
Ура
Подвійні лапки призначені для рядкових літералів, наприклад:
char str[] = "Hello world";
Одиночні лапки призначені для однозначних літералів, наприклад:
char c = 'x';
EDIT Як Девід заявив в іншій відповіді, тип буквеного символу є int
.
char str[] = {'H','e','l','l','o'};
, і str
було б НЕ мати нульовий термінатор.
str
не є рядком (принаймні, не рядком у стилі C, який визначено як NTBS).
char[]
(що люди часто називають "струнними"), не припиняється.
"hello" /*seamlessly connected to*/ "world"
. І це може мати сенс для коментованих багаторядкових повідомлень.
В одиночних лапках типу "a" вказують константи символів, тоді як "a" - це масив символів, завжди закінчується символом 0
Одинична цитата використовується для символу, а подвійна - для рядка.
printf("%c \n",'a');
printf("%s","Hello World");
Привіт Світ
Якщо ви використовували їх, навпаки, і використовували одну цитату для рядка та подвійну цитату для символу. Ось, це буде результат;
printf("%c \n","a");
printf("%s",'Hello World');
для першого рядка. У вас буде значення сміття або несподіване. Або у вас може бути такий вихід.
тоді як для другого твердження. Ви нічого не побачите. Ще одне. Якщо після цього у вас є більше тверджень. Вони також не дадуть результату.
Примітка. Мова PHP надає вам можливість легко використовувати одну та подвійну цитату.
Одиничні лапки позначають знак, а подвійне позначають рядок.
У Java це теж саме.
Використовуйте єдину цитату з одним знаком як:
char ch = 'a';
тут 'a'
є константа char і дорівнює ASCII
значенню char a.
Використовуйте подвійну цитату з рядками як:
char str[] = "foo";
ось "foo"
рядковий літерал.
Це добре використовувати, "a"
але використовувати його не нормально "foo'