探索C語言中單引號與雙引號的區別
今天看了《C陷阱與缺陷》中對””與’’的描述,’’引起的一個字元代表一個整數,整數值對應於該字元在編譯器採用的字符集中的序列值;””引起的字串代表的是一個指向無名陣列起始字元的指標。對這兩個符號產生了興趣,遂開啟VS2010查看了單引號、雙引號引起的字元在記憶體中的儲存形式。
實驗方式很簡單,分別檢視”yes”/’yes’/’ye’/’y’四種字元在記憶體中的儲存形式,程式碼如下:
int _tmain(int argc, _TCHAR* argv[])
{
char test1[] = "yes";
int test2 = 'yes';
printf("%x\n", &test2);
int
printf("%x\n", &test3);
int test4 = 'y';
printf("%x\n", &test4);
return 0;
}
實驗結果如下:
根據記憶體中的儲存形式,發現’’引起的字串按照整數的儲存形式,將第一個字元識別為最高位,最後一個字元識別為最低位,按此順序存入int變數4個位元組的儲存空間中;””引起的變數按照第一個字元儲存在起始地址處,最後一個字元儲存在結束地址處。實驗的結果證實了《C陷阱與缺陷》中的描述,那麼當’’引起的字元超過4個位元組時會出現什麼情況呢?再進行一次實驗,程式碼如下:
int _tmain(int
{
char test1[] = "yes";
int test2 = 'yes';
printf("%x\n", &test2);
int test3 = 'ye';
printf("%x\n", &test3);
int test4 = 'y';
printf("%x\n", &test4);
int test5 = 'yesa';
printf("%x\n", &test5);
return 0;
}
實驗結果如下:
根據實驗結果可以看到字元超過4個位元組,超出了int型儲存能力,編譯器報錯,提示常量字元太多。這樣可以有效提醒給程式猿同學,有可能存在符號輸入錯誤,但是沒有超過
相關推薦
探索C語言中單引號與雙引號的區別
今天看了《C陷阱與缺陷》中對””與’’的描述,’’引起的一個字元代表一個整數,整數值對應於該字元在編譯器採用的字符集中的序列值;””引起的字串代表的是一個指向無名陣列起始字元的指標。對這兩個符號產生了興趣,遂開啟VS2010查看了單引號、雙引號引起的字元在記憶體中的儲存形式
C#語言中數組與集合的區別(以List集合為例)
類型 添加元素 list 添加 一個 保存 操作方法 適用於 length 數組用於保存固定數量的數據,定長,占用內存少,遍歷速度快; 集合保存的數據數量,可以在程序的執行過程中,不斷發生變化,不定長,占用內存多,遍歷速度慢; 在功能上,數組能實現的所有功能,集合都能實現;
c語言中陣列名與指標的區別與聯絡
今天在工作中定義陣列的時候習慣性的使用char型指標後直接等於字串,但在編譯通過後執行的時候產生了段錯誤,因為著急就(整個函式程式碼還是比較多的)沒仔細看程式碼,只是抱著試試看的心態,將定義換成了陣列後等於字串的形式,居然沒有在出現段錯誤,感到很奇怪(剛乾程式設計師沒多久,
C語言中單引號和雙引號的區別
拿0來舉例: 單引號是單個字元‘0’; 雙引號是字串“0”,包含0和結束符 , 即‘0’‘\0’ 組成的有一個字元0和結束符組成的字串。 雙引號裡面的是字串,代表的卻是一個指向無名陣列起始字元的指標,該陣列被雙引號之間的字元以及一個額外的二進位制值為零的字元‘\0’初始化
C語言中單引號雙引號
C語言中的單引號和雙引號含義不一樣的。 1、含義不同。 用單引號引起的一個字元實際上代表一個整數,整數值對應於該字元在編譯器採用的字符集中的序列值。而一般我們的編譯器採用的都是ASCII字符集。因此's'的含義其實和十進位制數115的含義是一致的。 而用雙引號引起的
機房收費系統之收取金額查詢(TPicker控制元件時間段取值、SQL語句中單引號與雙引號區別)
收取金額查詢窗體較組合查詢而言就是小菜一碟,但即便是內容較少也有其精華之處,現在分享一下我的學習過程吧^_^ 一、收取金額查詢窗體的流程圖: 二、問題集 這是什麼錯誤呢,為什麼會出現這個型別的錯誤? 產生此問題的程式碼部分是什麼樣子的呢? 以
Js中的單引號與雙引號
單引號和雙引號其實沒啥區別,看你自己習慣了 <input type="button" onclick="alert("1")">-------------------不正確 <input type="button" onclick="alert('1')
Js中的單引號與雙引號問題
2.單引號包含雙引號的時候,裡面的雙引號不用轉義,反之亦然 看下面程式碼: <input type="button" onclick="alert("3")">-------------------不正確 <input type="button" onclick="alert('3')"
SQL中單引號與雙引號的區別
當 SET QUOTED_IDENTIFIER 為 ON 時,識別符號可以由雙引號分隔,而文字必須由單引號分隔。當 SET QUOTED_IDENTIFIER 為 OFF 時,識別符號不可加引號,且必須符合所有 Transact-SQL 識別符號規則。有關詳細資訊,請參閱識別符號。文字可以由單引號或雙引號分
java中單引號與雙引號的區別?hashcode()和equals()
單引號引的資料 是char型別的 雙引號引的資料 是String型別的 單引號只能引一個字元 而雙引號可以引0個及其以上 hashcode這個方法是用來鑑定2個物件是否相等的。 一般來講,equals這個方法是給使用者呼叫的,如果你想判斷2個物件是否相
C# 中的單精度與雙精度區別
數字 字節數 1.7 oat 處理 round col ble 浮點 單精度浮點數(float)與雙精度浮點數(double)的區別: (1)在內存中占有的字節數不同 * 單精度浮點數在機內占4個字節 *雙精度浮點數在機內占8個字節 (2)有效數字位數不同 *單精度浮點數有
【C】C語言中的_exit()與exit()
_exit()和exit()主要區別是一個退出程序會清理I/O緩衝區,一個直接結束程序進入到核心中。 舉例說明: 1 #include <stdio.h> 2 3 4 /*demo01 程式只輸出 hello world*/ 5 /* 6 int main() 7
C語言中負數除法與右移取整問題
今天碰到了負數除法與右移的替代問題,藉機研究一下C語言中負數除法的問題。此處只討論整數除2的冪次方的情況,並取-7~-5除以4為例,不討論一般除法的移位優化。 負數右移 對於有符號整數,右移時按高位補符號位的原則,則結果會向小於它的整數取整。如 -5 >
PHP echo 單引號與雙引號的區別
PHP中使用echo輸出字串時,使用單引號(' ‘)和雙引號(” “)都是可以的,比如: echo '測試變數在函式體外部的作用域</br>'; echo "測試變數在函式體外部的作
初學Linux(二)---Linux下C語言中的陣列與指標
初學Linux(二)—Linux下C語言中的陣列與指標 在經過階段一的linux學習之後,我來到了階段二的Linux下的C語言程式設計,雖然學到目前linux下的C語言似乎跟之前學的C語言所差無幾,但是按照老師的話來說,C語言指標這塊尤為重要,而我在這一方面的
淺談C語言中文字檔案與二進位制檔案
C語言中,按檔案中的資料組織形式來分,資料檔案可分為ASCII碼檔案(即文字檔案)和二進位制檔案。 文字檔案在磁碟中存放時每個字元對應一個位元組,用於存放對應的ASCII碼。 二進位制檔案把資料按其在記憶體中的儲存形式存放在磁碟上,一個位元組並不一定對應一個字元。 對於A
javascript的單引號與雙引號
在JavaScript中單引號和雙引號區別不大,在表示字串中是完全等效的,如果在字串中存在單引號則外面就要用雙引號,如果字串中存在雙引號則在外面要用單引號括起來,這樣就不用轉義裡面的符號了, 不
C語言中全域性變數與靜態全域性變數區別
全域性變數(外部變數)的說明之前再冠以static 就構成了靜態的全域性變數。全域性變數本身就是靜態儲存方式, 靜態全域性變數當然也是靜態儲存方式。 這兩者在儲存方式上並無不同。這兩者的區別在於非靜態全域性變數的作用域是整個源程式, 當一個源程式由多個原始檔組成時,非靜態
C語言中的二級指標(雙指標)
二級指標又叫雙指標。C語言中不存在引用,所以當你試圖改變一個指標的值的時候必須使用二級指標。C++中可以使用引用型別來實現。下面講解C中的二級指標的使用方法。例如我們使用指標來交換兩個整型變數的值。錯誤程式碼如下:一級指標#include <stdio.h> void swap(int *a,i
javascript字串單引號與雙引號的區別
最近在使用javascript程式設計,遇到使用字串的情況 寫了一點測試程式碼 var str = 'This is Jack'; var str2 = "This is Tom"; var str3 = 'This is