C veya C ++ programlamasında ne zaman tek tırnak ve çift tırnak kullanmalıyım?
C veya C ++ programlamasında ne zaman tek tırnak ve çift tırnak kullanmalıyım?
Yanıtlar:
C ve C ++ 'da tek tırnaklar tek bir karakteri tanımlar, çift tırnaklar ise bir dizgi hazır bilgisi oluşturur. 'a'
tek bir karakter değişmezidir, "a"
bir 'a'
ve bir boş sonlandırıcıyı içeren bir dize değişmezidir (2 karakter dizisidir).
C ++ 'da bir karakter değişmezinin türü char
, ancak C'de, bir karakter değişmezinin türünün int
, yani sizeof 'a'
ints 32bit (ve CHAR_BIT 8) olan bir mimaride 4, sizeof(char)
her yerde 1 olduğunu unutmayın.
Bazı derleyiciler ayrıca çok karakterli sabitlere izin veren bir uzantı uygular. C99 standardı şunları söylüyor:
6.4.4.4p10: "Birden fazla karakter içeren (örn., 'Ab') veya tek baytlık yürütme karakteriyle eşleşmeyen bir karakter veya kaçış dizisi içeren bir tamsayı karakter sabitinin değeri, uygulama tanımlıdır. "
Bu şöyle görünebilir, örneğin:
const uint32_t png_ihdr = 'IHDR';
Ortaya çıkan sabit (bunu uygulayan GCC'de), her karakteri alarak ve yukarı kaydırarak elde ettiğiniz değere sahiptir, böylece 'I', 32 bit değerin en önemli bitlerinde sonuçlanır. Açıkçası, platformdan bağımsız kod yazıyorsanız buna güvenmemelisiniz.
Tek tırnaklar karakterler ( char
), çift tırnaklar ise boş sonlandırılmış dizelerdir ( char *
).
char c = 'x';
char *s = "Hello World";
const char *
.
Tek tırnak işaretleri tek bir karakter içindir. Çift tırnak işaretleri bir dize (karakter dizisi) içindir. İsterseniz, her seferinde bir karakter dizesi oluşturmak için tek tırnak kullanabilirsiniz.
char myChar = 'A';
char myString[] = "Hello Mum";
char myOtherString[] = { 'H','e','l','l','o','\0' };
Ben gibi şeyler etrafında alay edildi: int cc = 'cc'; Temelde bir tamsayının bayt-bilge kopyasıdır. Dolayısıyla bakmanın yolu, temelde 2 c olan 'cc'nin cc tamsayısının daha düşük 2 baytına kopyalanmasıdır. Bir trivia arıyorsanız, o zaman
printf("%d %d", 'c', 'cc'); would give:
99 25443
çünkü 25443 = 99 + 256 * 99
Yani 'cc' çok karakterli bir sabittir ve bir dize değildir .
Şerefe
Çift tırnak işaretleri dizgi değişmezleri içindir, örneğin:
char str[] = "Hello world";
Tek tırnak işaretleri tek karakter değişmezleri içindir, örneğin:
char c = 'x';
DÜZENLEME David'in başka bir cevapta belirttiği gibi, bir karakter değişmezinin türü int
.
char str[] = {'H','e','l','l','o'};
ve str
olurdu değil boş terminatör var.
str
bir dize değildir (en azından NTBS olarak tanımlanan bir C stili dize değil).
char[]
(ki genellikle "dizeleri" olarak insanlar) olan her şey null sonlandırıldı değildi.
"hello" /*seamlessly connected to*/ "world"
. Ve bu, çok satırlı yorumlanmış mesajlar için anlamlı olabilir.
C'de 'a' gibi tek tırnak işaretleri karakter sabitlerini belirtirken, "a" her zaman 0 karakteriyle sonlandırılmış bir karakter dizisidir
Karakter için tek tırnak, dize için çift tırnak kullanılır.
printf("%c \n",'a');
printf("%s","Hello World");
bir Merhaba Dünya
Bunları tersi durumda ve dize için tek tırnak ve karakter için çift tırnak kullandıysanız. İşte bu sonuç olacak;
printf("%c \n","a");
printf("%s",'Hello World');
ilk satır için. çöp değeri veya beklenmedik olacak. ya da böyle çıktı olabilir.
�
ikinci ifade için. Hiçbir şey görmeyeceksin. Bir şey daha var. Bundan sonra daha fazla ifade varsa. Ayrıca size sonuç vermeyeceklerdir.
Not: PHP dili, tek ve çift alıntıları kolayca kullanma esnekliği sağlar.
Tek tırnak işaretleri bir karakteri, çift bir dizeyi belirtir.
Java'da da aynıdır.