C語言與缺陷

第一本C語言進階學習教材

1.字符與字符串

用單引號括起來的一個字符嚴格表示一個整數,而用雙引號括起來的一個字符代表一個指針。
  如char *slash='/'是錯誤的,因為'/'不是一個字符指針。同樣,printf('\n')可能帶來意想不到的錯誤。
  現代編譯器中,'yes'這種寫法可能不會被編譯器檢查出錯誤,但是編譯器會理解成"一個整數值,由'y','e','s'代表的整數值按特定編譯器實現中定義的方法組合得到,與"yes"代表的含義完全不同--依次包含'y','e','s','\0'的四個連續內存單元的首地址。

2.關于指針

例如在float *g(),g是一個指針函數,()結合優先級高于*,這里等價于*(g()),g是一個函數,它返回值是一個指向浮點數的指針。在float (*h)()中,h是一個函數指針,h指向的函數返回浮點值。
  一旦知道了如何申明一個給定類型的變量,那么該類型轉換符就很容易得到:只需要把申明中的變量名和末尾的分號去掉,再把剩余的部分用一個括號整個封裝起來。
  如float (*h)()>>>>(float (*)())表示一個“指向返回值為浮點類型的函數的指針”的類型轉換符。
  下面分析(*void(*)())0)()。
  首先這是一個(*)()的指針函數形式,進行剝離后得到(void(*)())0,這是一個強制類型轉換,將0轉換為“指向返回值為void的函數的指針”

3.指針與數組

  • c語言只有一維數組,而數組的大小必須在編譯器就作為一個參數確定下來。然而數組的元素可以是任意類型的對象,所以可以利用該特性仿真一個多維數組。
  • 對于一個數組,我們只能做兩件事:確定數組大小,獲得指向該數組下標為0的元素的指針。其他的操作即使看起來是以數組下標進行操作,實際上都是通過指針進行的操作。

例如若我們定義int a[3]。該語句申明了a是一個擁有3個整型元素的數組。再定義int *p,若希望p指向該數組,p=&a是不正確的,因為&a是一個指向數組的指針而p是指向整數的指針。應寫做p=a,即把a總下標為0的元素的地址賦給p。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 指針是C語言中廣泛使用的一種數據類型。 運用指針編程是C語言最主要的風格之一。利用指針變量可以表示各種數據結構; ...
    朱森閱讀 3,474評論 3 44
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy閱讀 9,540評論 1 51
  • 版權聲明:本文為 gfson 原創文章,轉載請注明出處。注:作者水平有限,文中如有不恰當之處,請予以指正,萬分感謝...
    gfson閱讀 3,202評論 0 6
  • Git和其他版本控制系統如SVN的一個不同之處就是有暫存區的概念。 先來看名詞解釋。 工作區(Working Di...
    蕭非子閱讀 505評論 0 50
  • 伯樂2012.04.27 就那一墻紅韻, 留下一席畫地。 誰能潑墨揮毫? 給生活以亮麗。
    伯樂響馬閱讀 171評論 0 0