程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++中單引號“字符串”的用法

C++中單引號“字符串”的用法

編輯:C++入門知識

今天在工作時看到一段略顯奇怪的代碼段,大概是這樣的:

switch (flag)
{
	case 'ABCD':
		TODO
		break;
	case 'EFDG':
		...
		break
	....
	default:
		break;
}
按鈕C++的標准,flag是一個整形,對於最近寫慣了Lua的我而言,這種用法一下變得陌生起來了,我想對於很多人而言,這種用法或許都是陌生的,時間有限暫且不去管C++標准中對'ABCD'這個“字符串”是如何定義的,那麼從寫法上來看‘ABCD’應該是表示了一個整型常量,所以下面我來寫一段代碼來看一下這個用法的是怎麼一回事:

#include 
#include 
using namespace std;

int main()
{
	int flag = 'ABCD';
	cout<< flag <
那麼輸出的結果是什麼呢:

1094861636
DCBA

從結果中可以看出G++將‘ABCD’每個字符逐個賦給了flag這個變量的每個字節,由於我們使用的是Intel的CPU,基於x86的架構。而於X86采用的是小端模式,即將整形的高位放在了內存的低地址處. 如果加一個輸出printf("%X\n", flag)會看到輸出為41424344, 41其實是字符A,所以'ABCD'其實代表的值就是 A << 24 + B << 16 + C << 8 + D.

由於CPU采用小端模式,故而將flag強制轉換成字符串輸出是將A放在了最後輸出,因為A是該整型的高位。

By the way, 如果寫成flag = 'ABC' 或者 flag = 'ABCDE"會出現什麼事呢?自己動手試一下,有一種情況是編譯不通過的哦。

END

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved