亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

關于《C和指針》的學習筆記

2020-01-26 16:18:12
字體:
來源:轉載
供稿:網友

  有了之前的基礎,此文只是把一些以前沒有注意到的和值得學習的知識做一個記錄。

第一章

  作者認為使用#if 0 .... #endif比用/*和*/好,因為后者不能嵌套。但是對于//并沒有說明。

第二章  

  三字母詞,用兩個問號加一個符號表示另一個符號,比較類似于轉義字符。查閱了一些資料,它的使用與編譯器有關,了解即可,防止字符串常量被錯誤的解釋。

復制代碼 代碼如下:

??( ==> [   ??< ==> {   ??= ==> # 

??) ==> ]   ??> ==> }   ??/ ==> / 

??! ==> |   ??' ==> ^    ??- ==> ~ 


  對于嵌套較深的函數(shù),作者建議把它分成幾個函數(shù)來實現(xiàn),不至于使用Tab縮進過多。

第三章  數(shù)據

  對于static的復雜用法,當它用于函數(shù)定義或代碼塊之外的變量聲明時,static用于修改標識符的連接屬性,從external改為internal,但標識符的存儲類型和作用域不受影響。用這種方式聲明的函數(shù)或變量只能在聲明它們的源文件中訪問。當它用于代碼塊內部的變量聲明時,static用于修改變量的存儲類型,從自動變量修改為靜態(tài)變量,但變量的鏈接屬性和作用域不受影響。用這種方式聲明的變量在程序執(zhí)行之前創(chuàng)建,并在程序的整個執(zhí)行期間一直存在,而不是每次在代碼塊開始執(zhí)行時創(chuàng)建,在代碼塊執(zhí)行完畢后銷毀。

 

第五章  操作符和表達式

  移位操作,當移動的位數(shù)為負值時,具體的結果與編譯器有關或者是未定義的,比如a<<-5可能是左移27位。

  形如a+=1的操作效率比a=a+1高,等價的a[ 2 * (y - 6*f(x)) ]=a[ 2 * (y- 6*f(x))] + 1與a[ 2 * (y- 6*f(x))] += 1相比,后者不用重復計算下標。

  sizeof x的形式是允許的。sizeof()并不對表達式求值,因此sizeof(a=b+1)中的a沒有賦值。

  訪問指向結構的指針的成員時只用->。

 

第六章  指針

  未初始化的指針會導致錯誤。int *a; *a = 12,這使a指向的地址的內容被修改,結果是無法預料的。

  作者認為在諸如搜索元素而未找到時返回值為NULL指針雖然是C的常用技巧,但違背了軟件工程的原則:“用一個單一的值表示兩種不同的意思是件危險的事,因為將來很容易無法弄清哪個才是它的真正用意”。安全的策略是返回兩個值,表示是否成功的狀態(tài)值和查找成功時所查找到的元素值。

 

第七章  函數(shù)

  無參數(shù)的函數(shù)原型聲明應該寫作這樣:int func(void); 目的是不與舊式風格聲明混淆。

  遞歸解決問題比非遞歸更為清晰,對于一個復雜問題,難以用迭代形式實現(xiàn)時,遞歸實現(xiàn)的簡潔性可以補償它所帶來的開銷。Fibonacci是一個常見的遞歸的例子,但冗余計算很多,開銷太大,實際上并不如迭代實現(xiàn)。

復制代碼 代碼如下:

Fibonacci的迭代實現(xiàn)

long fibonacci(int n)
{
    long result;
    long previous_result;
    long next_older_result;

    result = previous_result = 1;

    while( n > 2) {
       n -= 1;
       next_older_result = previous_result;
       previous_result = result;
       result = previous_result + next_older_result;
     }
    return result;
}


  可變參數(shù)列表的使用:頭文件stdarg.h,其中聲明了一個類型va_list和三個宏va_start、va_arg、va_end。通過聲明va_list類型的變量與這幾個宏配合使用,訪問參數(shù)的值。函數(shù)聲明了一個var_arg的變量用于訪問參數(shù)列表未確定部分,它通過va_start初始化。第1個參數(shù)是va_list變量的名字,第2個參數(shù)是省略號前最后一個有名字的參數(shù)。初始化過程把var_arg變量指向可變參數(shù)部分第1個參數(shù)。va_arg接受兩個參數(shù):va_list和參數(shù)列表的下一個參數(shù)的類型。va_arg返回參數(shù)的值并使var_arg指向下一個可變參數(shù)。訪問完畢調用va_end。
復制代碼 代碼如下:

#include <stdarg.h>

float average( int n_values, ... )
{
    va_list var_arg;
    int count;
    float sum = 0;

    /*準備訪問可變參數(shù)*/
    va_start( var_arg, n_values) ;

    /*添加取自可變參數(shù)列表的值*/
    for (count = 0; count < n_values; count += 1) {
        sum += va_arg( var_arg, int);
    }

    /*完成處理可變參數(shù)*/
    va_end(var_arg);
    return sum/n_values;
}


  可變參數(shù)的宏并不能判斷參數(shù)數(shù)量和參數(shù)類型,而后者可能會造成缺省參數(shù)類型的提升。解決這兩個問題的方法是使用命名參數(shù),也就是可變參數(shù)列表中總有一個有名字的參數(shù)的原因。

 

第八章  數(shù)組

  int array[10];int *ap =array+2;在這之后,ap[0]在C里是合法的,它等同于array[2],ap[-1]同樣是合法的,即array[1]。

  指針比數(shù)組更有效率的場合:for循環(huán)的ap++比循環(huán)體中的array[a] = 0有效率,前者的乘法計算只有一次,用于1與數(shù)據類型長度相乘,而后者每次都需要進行計算。

復制代碼 代碼如下:

/* 使用數(shù)組 */
int array[10], a;
for ( a = 0 ; a< 10; a +=1 )
    array[a] = 0;

/* 使用指針 */
int array[10], *ap;
for ( ap = array ; ap< array + 10; ap ++ )
    *ap = 0;


  數(shù)組特別是龐大的數(shù)組的初始化時間可能非常可觀,因此當數(shù)組的初始化局部于一個函數(shù)或代碼塊時,應當考慮程序每次都對其進行重新初始化是否值得。若否,把數(shù)組聲明為static。

  使用指針訪問多維數(shù)組的方法,例如對于數(shù)組int matrix[3][10],聲明int *mp = matrix是錯誤的,因為matrix并非一個指向整型的指針,而是一個指向整型數(shù)組的指針。int (*p)[10] = matrix是可以的,p指向matrix第一行,實現(xiàn)對數(shù)組的逐行訪問。如果需要逐個訪問,則使用int *pi = &matrix[0][0]或int *pi = matrix[0],使它指向第一個元素。而 int (*p)[] = matrix;是不正確的,它的值根據空數(shù)組的長度調整,這一錯誤有的編譯器不能捕捉到。函數(shù)傳參數(shù)類似。

  多維數(shù)組顯式初始化,只有第一維能夠推算出,其他維不能省略。

 

第九章  字符串、字符和字節(jié)

   無符號數(shù)的謹慎使用:strlen返回無符號數(shù),因此if(strlen(x) - strlen(y)>=0) ...永遠是真。這種情況下應該寫為if(strlen(x)>=strlen(y)) ...或者采用強制類型轉換把其轉為int。

  strtok保存它所處理的函數(shù)的局部狀態(tài)信息,因此不能用它同時解析兩個字符串。

  字符串函數(shù)遇到NULL字節(jié)結束操作,想要處理非字符串數(shù)據時不受到這個限制,可以使用另一組相關的函數(shù):memcpy、memmove、memcmp、memchr、memset。

 

第十章  結構和聯(lián)合

  參數(shù)為結構的函數(shù),傳遞指針比傳值調用更高效,這是因為后者需要建立一份結構的拷貝。f(type_struct *s){s->x};調用即為f(&s)。如果對這個結構的成員訪問次數(shù)超過3次,聲明為寄存器變量會更加有效。為了避免不適當?shù)男薷模梢园褏?shù)聲明為const,將返回值賦給原結構(或它的一個成員)。

  位段只是進行了簡單的了解,它是一種指定了成員長度的特殊結構。

 

第十三章  高級指針話題

  回調函數(shù)的使用可以解決類似于比較不明類型數(shù)據的問題,這里也是第一次系統(tǒng)地認識回調函數(shù)。

 

第十四章  預處理器

  消除多重包含的危險的方法,在每個頭文件寫入以下內容:

復制代碼 代碼如下:

#ifndef _HEADRNAME_H
#define _HEADRNAME_H 1
/* All the stuff that you want in the header file*/
#endif

第一次被包含時將_HEADRNAME_H定義為1,再次被包含時將被忽略。即使把它寫做#define _HEADRNAME_H都是可以的。但是仍應該盡可能避免多重包含。

 

第十五章  輸入/輸出函數(shù)

  freopen用于打開(或重新打開)一個特定的文件流,原型:FILE *freopen(char const *filename,char const *mode, FILE *stream),其中最后一個參數(shù)就是需要打開的流。它首先試圖關閉這個流,然后用指定的文件和模式重新打開這個流,失敗返回NULL,成功返回第三個參數(shù)。

  ungetc把先前讀入的字符返回到流中,使它可以以后被重新讀入。《C程序設計語言》上有一個字符處理的例子用到了它,在此復習一下。當fseek、fsetpos或rewind改變流的位置時,所有退回的字符都將被丟棄。

  gets和puts與fgets和fputs的區(qū)別在于,gets讀取一行輸入時,并不在緩沖區(qū)存儲結尾的換行符,puts寫入一個字符串時,它在字符串寫入后向輸出再添加一個換行符。另外gets不判斷緩沖區(qū)長度,而這會造成危險。

  feof判斷流是否處于文件尾,ferror報告流的錯誤狀態(tài),clearerr對指定流的錯誤標志進行重置。

  tmpfile創(chuàng)建一個臨時文件保存數(shù)據,程序結束時就被刪除。臨時文件的名字由tmpnam創(chuàng)建。

 

第十六章  標準函數(shù)庫

  volatile是類型修飾符,被設計用來修飾被不同線程訪問和修改的變量,阻止編譯器以一種可能修改程序含義的方式“優(yōu)化”程序。

  vprintf、vfprintf、vsprintf用于打印可變參數(shù)列表,功能類似于對應的prinft等函數(shù),但參數(shù)是一個可變參數(shù)列表arg。

  getenv獲取環(huán)境變量,如果找到就用指針返回,否則返回NULL。

  locale是一組特定的參數(shù),每個國家可能不同,目的是增強C的世界范圍內的通用性,不詳細記述。

 

  對于十七章經典抽象數(shù)據類型和第十八章運行時環(huán)境,前者已經比較熟悉,后者與匯編結合緊密,只是粗略瀏覽了一下,這本書姑且算是看完了。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

一本久道中文无码字幕av| 国产精品第七页| www.com.cn成人| av在线资源| 99精品视频在线播放免费| 天天干天天操天天爽| 国产精品91久久久久久| 午夜精品视频网站| 写真福利精品福利在线观看| 素人啪啪色综合| 国产精品一级在线观看| 日本黄色录像视频| 中文在线8资源库| 日韩美女av在线免费观看| 毛片免费在线观看| 女明星视频黄又免费| 一区二区三区电影| 日本国产在线播放| 久久99青青精品免费观看| 国产女人在线视频| 久久久综合网站| 青青草原在线亚洲| 另类人妖一区二区av| 91在线观看免费高清完整版在线观看| 欧美亚洲综合视频| 欧美日韩国产欧美日美国产精品| 青青青青国产视频| 欧美日韩中文字幕综合视频| 国产精品99无码一区二区| 亚洲国产一区二区三区在线| 中国极品少妇videossexhd| 久久白虎精品| 国产亚洲一区二区三区四区| 五月婷婷丁香六月| 神马影视一区二区| 亚洲专区视频| 最近中文字幕在线mv视频在线| 老司机性视频| 国产精品最新在线观看| 一区二区成人在线观看| 天天操天天爽天天射| 国产精品极品| 日本国产欧美一区二区三区| 无码人妻丰满熟妇精品| 男人天堂av网| 欧美成人黄色网址| 久久先锋资源网| 日本亚洲一区二区| 欧美精品 - 色网| 欧美精品久久久久久久免费观看| 神马午夜一区二区| 色多多国产成人永久免费网站| 欧美国产视频一区| 黄色国产网站在线播放| 国产伦理吴梦梦伦理| 中文产幕区在线观看| 三级在线看中文字幕完整版| 亚洲尤物影院| 亚洲欧洲综合网| 免费看国产精品一二区视频| 欧美成人精品二区三区99精品| 欧美韩国一区二区| 国产自产视频| 欧美成欧美va| 日韩中文字幕区一区有砖一区| 亚洲av成人无码久久精品老人| 久久久精品国产亚洲| 国产91丝袜在线播放0| 奇米视频888战线精品播放| 成人午夜免费福利| 国产精品一区二区在线观看网站| 亚洲熟女毛茸茸| 国产乱子伦一区二区三区国色天香| 国产精品麻豆欧美日韩ww| 久久九九精品视频| 精品动漫一区二区三区在线观看| 91视频综合网| 欧美日韩午夜视频在线观看| 无码 制服 丝袜 国产 另类| 99国产精品视频免费观看一公开| 久久99国产精品99久久| 九九久久99| 精品乱人伦一区二区三区| 污黄网站在线观看| 亚洲第一主播视频| 91吃瓜网在线观看| 高清欧美日韩| 欧美日韩国产色综合一二三四| 成人毛片在线免费观看| 成人福利网站在线观看11| 欧美一区二区三区免费| 久久久久久久9999| 青青草视频在线视频| 国产精品丝袜一区二区三区| 国产中文字幕91| 欧美xxxx性猛交bbbb| 999久久久91| 国产三级伦理在线| 3d动漫精品啪啪1区2区免费| 亚洲综合99| 美女被啪啪一区二区| 久久久久久综合网天天| 成人精品影院| 国产一级二级三级视频| 欧美性感一区二区三区| 精品176二区| 91亚洲一线产区二线产区| 亚洲高清不卡| 久久亚洲二区| 喷水视频在线观看| 久久伊人亚洲| 久久久久亚洲av片无码v| 污视频网址在线观看| 亚洲人成网站77777在线观看| 亚洲最大成人网色| 99国产麻豆精品| 国产欧美精品区一区二区三区| 波多野结衣手机在线视频| 国产乱码精品一区二区三区精东| 国产精品久久久久免费| bbbbbbbbbbb在线视频| 日本大片在线播放| 欧美 国产 综合| 亚洲精品www久久久| 国产精品久久电影观看| 亚洲va中文在线播放免费| 免费一级a毛片夜夜看| 九色视频一区| 久久精品国产一区二区三区免费看| 黄色免费在线网站| 日韩av高清在线播放| 成人免费高清观看| 日本天堂在线| 在线成人免费| 国产精品国产自产拍高清av| 色天堂在线视频| 在线三级中文| 欧美男男gaygay1069| 国户精品久久久久久久久久久不卡| 五月天婷婷综合| 综合在线视频| 痴汉一区二区三区| 欧美粗暴jizz性欧美20| 9191在线播放| 三区精品视频观看| 不卡视频免费播放| yy111111少妇影院日韩夜片| 亚洲男人的天堂一区二区| 日韩福利视频一区| 97在线电影| 国产美女极度色诱视频www| 精品日韩欧美一区二区| 日韩性xxxx| 国产成人在线免费观看视频| 久久国产精品72免费观看| 国产在线观看色| 99久久亚洲精品日本无码| 久久综合88中文色鬼| 欧美区日韩区| 国产日韩欧美中文在线播放| 成人av网址在线观看| 日本在线视频观看| 国产亚洲1区2区3区| 99久久精品费精品国产风间由美| 日本欧美一区二区三区不卡视频| 无码人妻一区二区三区在线视频| 国产成人小视频在线观看| 欧美性猛交7777777| 丁香花在线观看完整版电影| 在线观看亚洲a| 国产卡1卡2卡三卡在线| 欧美黄色网页| 欧美性一二三区| 色婷婷成人网| 一区二区视频免费完整版观看| 美日韩中文字幕| 欧美jizz19性欧美| 欧美野外猛男的大粗鳮| 综合激情在线| 亚洲视频精品在线观看| www.在线欧美| 97超碰人人澡| 日本成人中文字幕| 97人妻一区二区精品视频| 无码熟妇人妻av在线电影| 老鸭窝91久久精品色噜噜导演| 色综合老司机第九色激情| 国产免费无遮挡吸奶头视频| 欧美专区日韩专区| 日韩精品极品视频免费观看| 国语自产精品视频在免费| 成人精品影视| 欧美va亚洲va在线观看蝴蝶网| 日韩中文字幕| 97久久精品视频| 91视频免费版污| 一女三黑人理论片在线| 日本国产一区二区| 青青青视频在线| 中文字幕视频在线免费观看| 亚洲va欧美va在线观看| 大地资源中文在线观看免费版| 亚洲欧洲日韩综合一区二区| 美女网站视频在线观看| 麻豆一区二区99久久久久| 91亚洲国产成人久久精品网站| av福利网址| 精品99久久久久成人网站免费| 欧美在线国产| 麻豆av免费在线| 国产目拍亚洲精品99久久精品| 青青操免费在线视频| 午夜福制92视频| 国模极品一区二区三区| 国产美女精品视频免费观看| 中文字幕av日韩精品| 三级外国片在线观看视频| 亚洲色图视频免费播放| 成人黄色中文字幕| 亚洲熟妇无码久久精品| 国产欧美日韩视频在线观看| 欧美人妇做爰xxxⅹ性高电影| 精品视频免费在线播放| 日韩欧美中文一区二区| 夜夜精品视频| 高清av影院| 亚洲 国产 欧美一区| 69久成人做爰电影| 欧美一级片一区| 亚洲精品乱码电影在线观看| 国产精品成熟老女人| 亚洲成人免费| 免费又爽又黄禁片视频1000片| 涩涩视频免费网站| 伦理片一区二区| 欧美交换配乱吟粗大25p| 人妖欧美一区二区| 国产精品久久久久精k8| 日韩在线观看网站| 亚洲天堂视频在线观看| 国产麻豆入在线观看| 蜜桃成人在线| 16—17女人毛片毛片| 成人免费性视频| 色综合色狠狠综合色| 国产麻豆一区二区三区在线观看| 中日韩免视频上线全都免费| 亚洲自拍偷拍网| 国产精品国产三级国产专区53| 蜜桃国内精品久久久久软件9| 久久日本片精品aaaaa国产| 国产精品视频一区视频二区| 国产伦理一区二区三区| 国产黄色大片免费看| 国产精品亚洲一区二区在线观看| 欧洲亚洲成人| 欧美亚洲成人网| 久久精品视频一区二区三区| 欧美videos巨大粗暴| 国产a久久精品一区二区三区| 久久精品国产亚洲av久| 久久中文字幕精品| 美女的胸无遮挡在线观看| 在线看的av网站| 色悠悠亚洲一区二区| 亚洲香蕉成人av网站在线观看| 久久网站免费观看| 国产麻豆精品在线| 久久av一区二区三区亚洲| 国产 日韩 欧美 在线| 蝌蚪视频在线播放| 91九色极品视频| 国产精品自偷自拍| 久久丝袜美腿综合| 亚洲男人天堂av| 国产精品另类一区| 色久综合一二码| 亚洲视频久久| 欧美激情欧美激情在线五月| 亚洲精品www久久久久久广东| 2色视频网站| 大白屁股一区二区视频| 成人欧美大片| 哺乳一区二区三区中文视频| 黄色激情在线视频| av毛片午夜不卡高**水| 久久国产精品久久久| 欧美激情在线播放| 国产精品美女久久久久久久久| 精品国产乱码久久久久久1区二区| 国产女主播在线写真| 两个人看的免费完整在线观看| 久久婷婷国产| 草草地址线路①屁屁影院成人| 日韩中文在线播放| 亚洲人的天堂男人爽爽爽| 欧美在线免费观看| 日韩欧美成人激情| 欧美午夜寂寞| 91亚洲资源网| 69中国xxxxxxxxx69| 日本一区二区精品视频| 九九这里只精品视在线99| 亚洲综合爱爱久久网| 天天射天天爱天天射干| 中文字幕免费一区| 久久精品成人动漫| 欧美精品国产一区二区| 日本一区二区视频在线播放| 高清av在线| 好吊色免费视频| 欧美成人精品三级在线观看| 在线天堂日本| 成人信息集中地欧美| 99免费视频| av电影资源| 国产日韩在线免费| 日韩电影免费观看中文字幕| 粉嫩嫩av羞羞动漫久久久| 国产视频三级在线观看播放| 日本精品一区| 国产一区二区三区四区三区四| 欧美成人免费va影院高清| 国产精品亚洲综合色区韩国| 欧美性受xxxx黑人爽| 日本japanese极品少妇| 欧美人狂配大交3d怪物一区| 欧美视频在线观看免费网址|