簡體   English   中英

C 或 C++ 中的單引號與雙引號

[英]Single quotes vs. double quotes in C or C++

C或C++編程什么時候用單引號和雙引號?

在 C 和 C++ 中,單引號標識單個字符,而雙引號創建字符串文字。 'a'是單個字符文字,而"a"是包含'a'和空終止符的字符串文字(即 2 字符數組)。

在 C++ 中,字符文字的類型是char ,但請注意,在 C 中,字符文字的類型是int ,即sizeof 'a'在 int 為 32 位(且 CHAR_BIT 為 8)的架構中為 4,而sizeof(char)處處為 1。

一些編譯器還實現了允許多字符常量的擴展。 C99 標准說:

6.4.4.4p10:“包含多個字符(例如,'ab')或包含不映射到單字節執行字符的字符或轉義序列的整數字符常量的值是實現定義的。 "

這可能看起來像這樣,例如:

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'; 碰巧它基本上是按字節復制到整數。 因此,查看它的方法是將基本上是 2 個 c 的“cc”復制到整數 cc 的低 2 個字節。 如果您正在尋找瑣事,那么

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");

輸出

a  
Hello World

如果您在反之亦然的情況下使用這些,並對字符串使用單引號,對字符使用雙引號,結果如下:

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

輸出 :

對於第一行。 你會得到一個垃圾值或意外值,或者你可能會得到這樣的輸出:

而對於第二個語句,您什么也看不到。 還有一件事,如果你在這之后有更多的陳述,他們也不會給你任何結果。

注意:PHP 語言使您可以靈活地輕松使用單引號和雙引號。

單引號表示字符,雙引號表示字符串。

在 Java 中也是如此。

使用帶有單字符的單引號作為:

char ch = 'a';

這里'a'是一個 char 常量,等於 char a 的ASCII值。

將雙引號與字符串一起使用:

char str[] = "foo";

這里的"foo"是一個字符串文字。

可以使用"a" ,但不能使用“ foo'

雖然我確定這不能回答原始提問者的問題,但如果你最終在這里尋找像我一樣的文字整數中的單引號......

C++14 添加了在數字文字中間添加單引號 ( ' ) 的功能,以便為數字添加一些視覺分組。

constexpr int oneBillion = 1'000'000'000;
constexpr int binary = 0b1010'0101;
constexpr int hex = 0x12'34'5678;
constexpr double pi = 3.1415926535'8979323846'2643383279'5028841971'6939937510;

在 C 和 C++ 中,單引號稱為字符 ('a'),而雙引號稱為字符串 ("Hello")。 不同之處在於,一個字符可以存儲任何內容,但只能存儲一個字母/數字等。字符串可以存儲任何內容。 但也要記住'1'和1之間是有區別的。如果你輸入cout<<'1'<<endl<<1; 輸出將是相同的,但在這種情況下不同:

cout<<int('1')<<endl<<int(1);

這次第一行是 48。當你將一個字符轉換為 int 時,它會轉換為它的 ascii,而 '1' 的 ascii 是 48。同樣,如果你這樣做:

string s="Hi";
s+=48; //This will add "1" to the string
s+="1"; This will also add "1" to the 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));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM