最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C 語言基礎(chǔ)教程(我的C之旅開始了)[六]

 更新時間:2007年02月25日 00:00:00   作者:  
14. 基本數(shù)據(jù)類型:字符型(上)
1.字符型(char)簡介
 
        字符型char)用于儲存字符(character),如英文字母或標(biāo)點(diǎn)。嚴(yán)格來說,char 其實也是整數(shù)類型(integer type),因為 char 類型儲存的實際上是整數(shù),而不是字符。計算機(jī)使用特定的整數(shù)編碼來表示特定的字符。美國普遍使用的編碼是 ASCII(American    Standard    Code   for    Information   Interchange  美國信息交換標(biāo)準(zhǔn)編碼)。例如:ASCII 使用 65 來代表大寫字母 A,因此存儲字母 A 實際上存儲的是整數(shù)65。注意:許多IBM大型機(jī)使用另一種編碼——EBCDIC(Extended Binary-Coded Decimal Interchange Code 擴(kuò)充的二進(jìn)制編碼的十進(jìn)制交換碼);不同國家的計算機(jī)使用的編碼可能完全不同。
        ASCII 的范圍是 0 到 127,故而 7 位(bit)就足以表示全部 ASCII。char 一般占用 8 位內(nèi)存單元,表示ASCII綽綽有余。許多系統(tǒng)都提供擴(kuò)展ASCII(Extended ASCII),并且所需空間仍然在 8 位以內(nèi)。注意,不同的系統(tǒng)提供的擴(kuò)展 ASCII 的編碼方式可能有所不同!
        許多字符集超出了 8 位所能表示的范圍(例如漢字字符集),使用這種字符集作為基本字符集的系統(tǒng)中,char 可能是 16 位的,甚至可能是 32 位的??傊?,C 保證 char 占用空間的大小足以儲存系統(tǒng)所用的基本字符集的編碼。C 語言定義一個字節(jié)(byte)的位數(shù)為 char 的位數(shù),所以一個字節(jié)可能是 16 位,也可能是 32 位,而不僅僅限于 8 位。
 
 
2.聲明字符型變量
 
        字符型變量的聲明方式和其它類型變量的聲明方式一樣:
 
              char good;
              char better, best;
 
以上代碼聲明了三個字符型變量:good、better,和 best。
 
 
3.字符常量與初始化
 
        我們可以使用以下語句來初始化字符型變量:
 
              char ch = 'A';
 
這個語句把 ch 的值初始化為 A 的編碼值。在這個語句中,'A' 是字符常量。C 語言中,使用單引號把字符引起來就構(gòu)成字符常量。我們來看另外一個例子:
 
              char fail;         /* 聲明一個字符型變量        */
              fail = 'F';          /* 正確                      */
              fail = "F";       /* 錯!"F" 是字符串常量      */
 
把字符用雙引號引起來構(gòu)成字符串常量,所以第三個語句是錯誤的。我們會在后續(xù)的教程中討論字符串,現(xiàn)在暫且把它放下。
        因為字符實質(zhì)上是以數(shù)字的形式存儲的,所以我們可以直接使用數(shù)字來初始化字符變量,或者給字符變量賦值:
 
              char ch = 65; /* 不好的風(fēng)格 */
 
在 ASCII 中,A 的編碼是 65,所以對于使用 ASCII 的系統(tǒng)來說,這個語句等同于 char ch = 'A';。使用非 ASCII 的系統(tǒng)中,65 代表的不一定是 A,而有可能是其它任何字符,所以使用數(shù)字來初始化字符變量,或者給字符變量是一種不好的風(fēng)格,因為移植性太差了!但是,使用字符常量(例如 'A')來初始化字符變量,或者給字符變量賦值,字符變量得到的一定是我們所期待的字符的編碼值。例如:
 
              char ch = 'A';
 
無論在使用任何編碼的系統(tǒng)中,ch 都能夠得到字符 A 所對應(yīng)的編碼值。這是因為編譯器會自動把 'A' 轉(zhuǎn)化成 A 所對應(yīng)的編碼值。因此,我們應(yīng)該使用字符常量來初始化字符變量,或者給字符變量賦值;而不要用數(shù)字。
       有趣的是,C 使用 int 類型來處理字符常量,而不是 char 類型。例如,在使用32位 int 的ASCII 系統(tǒng)中,以下代碼
 
              char ch = 'C';
 
'C' 的編碼值 67 被存儲于 32 位的內(nèi)存單元中;不過 ch 仍然存儲于 8 位的內(nèi)存單元中,只是它的值變成了 67。因此,我們可以定義形如 'good' 的古怪字符常量。因為每個字符的編碼值占用 8 位的內(nèi)存單元,所以這個常量剛好可以存儲于 32 位的內(nèi)存單元。然而,用這種字符常量初始化字符變量,或者給字符變量賦值的話,導(dǎo)致的結(jié)果是,字符變量只能得到字符常量的最后 8 位。也就是說,以下代碼
 
              char ch = 'good';
 
ch 得到的是 'd' 的值。
 
以后,在沒有特殊說明的情況下,我們討論的都是 ASCII。
15. 基本數(shù)據(jù)類型:字符型(中)

不可打印字符(Nonprinting Characters
 
 
    有些 ASCII 字符是不可打印的。例如退格、另起一行警報等。C 語言提供了兩種方法來表示這種不可打印字符。
 
    第一種方法是使用 ASCII 編碼。例如,ASCII 編碼中,7 用于表示警報:
 
        char beep = 7;
 
    第二種方法是使用特殊符號序列,也就是所謂的轉(zhuǎn)義字符escape sequences。參見下表:
 
    轉(zhuǎn)義字符          含義
          \a           警報( Alert (ANSI C) )
          \b            退格(Backspace)
          \f            換頁(Form feed)
          \n            換行(Newline)
          \r            回車(Carriage return)
          \t            水平制表符(Horizontal tab)
          \v            垂直制表符(Vertical tab)
          \\            反斜桿( Backslash (\) )
          \'            單引號( Single quote (') )
          \"            雙引號( Double quote (") )
          \?            問號( Question mark (?) )
          \0oo        八進(jìn)制數(shù)( Octal value (o 代表一個八進(jìn)制數(shù)字) )
          \xhh        十六進(jìn)制數(shù)( Hexadecimal value (h 代表一個十六進(jìn)制數(shù)字) )
 
給變量賦值的時候,轉(zhuǎn)義字符必須使用單引號引住。例如:
 
          char nl = '\n';
 
下面我們詳細(xì)學(xué)習(xí)每個轉(zhuǎn)移字符的含義。
 
    \a(警報)是 ANSI C89 添加的,用于產(chǎn)生可聽或者可視的警報。\a 產(chǎn)生的效果取決于硬件。一般來說,輸出 \a 會產(chǎn)生鳴響。但是在某些系統(tǒng),輸出 \a 不會產(chǎn)生任何效果,或者僅僅顯示一個特殊字符。標(biāo)準(zhǔn)明確指出,\a 不應(yīng)該改變當(dāng)前活躍位置active position)。所謂活躍位置,是指顯示設(shè)備(顯示器、打字機(jī)、打印機(jī)等等)顯示下一個字符的位置。以顯示器為例,活躍位置就是指光標(biāo)所處的位置,輸出 \a 不會導(dǎo)致光標(biāo)移動位置。
 
\b、\f、\n、\r、\t,以及 \v 都是輸出設(shè)備控制符。退格符(\b)使當(dāng)前行的活躍位置后退一個位置。換頁符(\f)使活躍位置跳到下一頁的開端。注:換頁符可用于控制打印機(jī)換頁,但不會導(dǎo)致 PC 機(jī)的顯示屏換頁。換行符(\n)使活躍位置跳到下一行的開端?;剀嚪?( \r ) 使活躍位置返回當(dāng)前行的開端。水平制表符(\t)使活躍位置移動若干個位置(通常是8個)。垂直制表符(\v)使活躍位置換若干行。注:\v可用于控制打印機(jī)換若干行,但是不會導(dǎo)致PC機(jī)的顯示屏換行。
 
    \\、\',以及 \" 使我們可以把 \,' " 用作字符常量。如果要打印以下句子:
 
"\ is called 'backslash'."
 
我們需要使用如下語句:
 
printf("\"\\ is called \'backslash\'.\"");
 
    \0oo \xhh 是ASCII碼的兩種特殊表示形式。如果想用八進(jìn)制ASCII碼表示字符,可以在八進(jìn)制數(shù)前面加上 \ ,然后用單引號引起來。例如:
 
            beep = '\007';        /*  \007 代表 \a  */
 
打頭的那些0可以省略,也就是說,寫成 '\07' 或者 '\7' 都一樣。無論有沒有打頭的0 ,7 都會被當(dāng)成八進(jìn)制數(shù)處理。
 
    從 C89 開始,C提供了用十六進(jìn)制表示字符常量的方法:在反斜桿后面寫一個 x ,然后再寫 1 到 3 個十六進(jìn)制數(shù)字。例如:
 
            nl = '\xa';        /*  \xa 代表 \n  */
 
    注意:使用ASCII碼時,要注意區(qū)分數(shù)字4的ASCII碼是52 ,'4' 代表字符 4 ,而不是數(shù)字4。此外,盡管 '\n' 和 '\xa' ,'\a' 和 '\007' 是等價的,但是我們應(yīng)該盡可能使用 '\n' 和 '\a' ,而不要用 '\xa' 和 '\007' 。這是因為前者易懂、便于記憶,而且移植性更高。而后者只對使用ASCII碼的系統(tǒng)有效。數(shù)字字符。例如:字符
16. 基本數(shù)據(jù)類型:字符型(下)

一、字符輸出
 
        printf 函數(shù)使用 %c 表示輸出字符。因為字符是以 1 字節(jié)整數(shù)的形式存取的,所以,如果使用 %d 的話,輸出的會是整數(shù)。例如:
 
/* 這個程序輸出字符以及字符的整數(shù)編碼 */
#include <stdio.h>
 
int main(void)
{
      char ch;
 
      printf("Please enter a character.\n");
      scanf("%c", &ch);   /* 由用戶輸入一個字符 */
      printf("The code for %c is %d.\n", ch, ch);
 
      return 0;
}
 
請各位自行編譯執(zhí)行此程序,查看其執(zhí)行結(jié)果。輸入字符后記得要按回車鍵。
 
        printf 函數(shù)輸出 ch 的值兩次,第一次以字符的形式輸出(因為格式限定符為 %c),第二次以十進(jìn)制整數(shù)的形式輸出(因為格式限定符是 %d)。注意:格式限定符只是用于指定數(shù)據(jù)的輸出形式,而不是用來指定數(shù)據(jù)怎么存儲。
 
二、字符類型的符號
 
        某些編譯器中,char 默認(rèn)是有符號的(signed)。對于這類型的編譯器來說,char 的表示范圍通常是 -128 到 127 。而另外一些編譯器中,char 默認(rèn)是無符號的(unsigned)。對于這類型的編譯器來說,char 的表示范圍通常是 0 到 255 。一般來說,編譯器的使用說明會注明它默認(rèn)把 char 當(dāng)作有符號的還是無符號的。
 
        從 C89 開始,我們可以使用關(guān)鍵字 signed 和 unsigned 來修飾 char 。這么一來,無論編譯器默認(rèn) char 是有符號的也好,無符號的也罷,我們都可以用 signed char 表示有符號 char ,也可以用 unsigned char 表示無符號 char 。

相關(guān)文章

  • C++中std::invalid_argument報錯解決

    C++中std::invalid_argument報錯解決

    在C++編程中,std::invalid_argument是一個常見的異常,用于指示函數(shù)參數(shù)無效,文章詳細(xì)解析了這一異常的產(chǎn)生原因,并提供了多種解決策略,感興趣的可以了解一下
    2024-09-09
  • C++中單鏈表的建立與基本操作

    C++中單鏈表的建立與基本操作

    以下是對C++中單鏈表的建立與基本操作進(jìn)行了詳細(xì)的介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2013-10-10
  • C++?多線程編程pthread的基本使用詳解

    C++?多線程編程pthread的基本使用詳解

    在C++開發(fā)中,原生的線程庫主要有兩個,一個是C++11提供的<thread>(std::thread類),另一個是Linux下的<pthread.h>(p_thread類),本文主要介紹pthread的基本使用方式,需要的朋友可以參考下
    2024-05-05
  • Qt編寫地圖實現(xiàn)動態(tài)點(diǎn)位標(biāo)注的示例代碼

    Qt編寫地圖實現(xiàn)動態(tài)點(diǎn)位標(biāo)注的示例代碼

    動態(tài)點(diǎn)位標(biāo)注是定制的一個功能模塊,提供直接地圖上選點(diǎn)設(shè)置標(biāo)記點(diǎn),點(diǎn)位信息用結(jié)構(gòu)體存儲,其中包括了經(jīng)度、緯度、速度、時間等信息。本文將介紹實現(xiàn)這一功能的示例代碼,需要的可以參考一下
    2022-01-01
  • win32 api實現(xiàn)2048游戲示例

    win32 api實現(xiàn)2048游戲示例

    這篇文章主要介紹了win32 api實現(xiàn)2048游戲示例,需要的朋友可以參考下
    2014-05-05
  • 用C語言實現(xiàn)計算器功能

    用C語言實現(xiàn)計算器功能

    這篇文章主要為大家詳細(xì)介紹了用C語言實現(xiàn)計算器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • C語言利用cJSON解析JSON格式全過程

    C語言利用cJSON解析JSON格式全過程

    cJSON是用于解析json格式字符串的一套api,非常好用,下面這篇文章主要給大家介紹了關(guān)于C語言利用cJSON解析JSON格式的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-04-04
  • C++11如何實現(xiàn)無鎖隊列

    C++11如何實現(xiàn)無鎖隊列

    這篇文章主要介紹了C++11如何實現(xiàn)無鎖隊列,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08
  • C++11, 14, 17對tuple元素的訪問詳情

    C++11, 14, 17對tuple元素的訪問詳情

    這篇文章主要介紹了C++11, 14, 17對tuple元素的訪問詳情,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • C++中std::thread線程用法

    C++中std::thread線程用法

    本文主要介紹了C++中std::thread線程用法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01

最新評論

中宁县| 金华市| 镇原县| 梅州市| 甘肃省| 林州市| 商城县| 临夏市| 万州区| 富源县| 巫山县| 明光市| 泽州县| 和林格尔县| 邯郸县| 出国| 重庆市| 婺源县| 保德县| 共和县| 札达县| 澄江县| 蓬安县| 清远市| 仲巴县| 海晏县| 施甸县| 达州市| 永定县| 新宁县| 湖北省| 商都县| 固安县| 会东县| 沂南县| 武清区| 曲麻莱县| 正阳县| 湘潭市| 玉溪市| 清新县|