亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        深入理解指針在C語言中的應(yīng)用

        2012-11-14 04:31:44唐婷
        中國科技信息 2012年10期
        關(guān)鍵詞:鏈表指針代碼

        唐婷

        四川職業(yè)技術(shù)學(xué)院計算機科學(xué)系,四川 遂寧 629000

        深入理解指針在C語言中的應(yīng)用

        唐婷

        四川職業(yè)技術(shù)學(xué)院計算機科學(xué)系,四川 遂寧 629000

        本文介紹指針的基本概念、特性,以及對c語言的重要性。描述指針在c語言中的應(yīng)用,深入理解指針在c語言編程中所占有的地位,以及掌握這些方法對今后編程的作用。

        c語言;指針;算法

        c language; Pointer; Algorithm

        前言

        在計算機工程中指針是一個用來指示一個內(nèi)存地址的計算機語言的變量。指針常常出現(xiàn)在比較靠近機器語言的環(huán)境,這樣能更好地為底層軟件的編寫提供支持。指針一般指向一個函數(shù)或一個變量。在使用一個指針時,一個程序既可以直接使用這個指針?biāo)鶅Υ娴膬?nèi)存地址,又可以使用這個地址里儲存的變量或函數(shù)的值。

        簡單地說其實指針就像是其它變量一樣,所不同的是一般的變量包含的是實際的真實的數(shù)據(jù),而指針包含的是一個指向內(nèi)存中某個位置的地址。指針可以表示各種數(shù)據(jù)對象,如簡單變量、數(shù)組、數(shù)組元素、結(jié)構(gòu)體、甚至是函數(shù)。

        常說指針是c語言的靈魂,沒有學(xué)會指針的使用,就不能說學(xué)號了c語言?,F(xiàn)階段c語言的主要應(yīng)用于嵌入式系統(tǒng)、linux內(nèi)核等對于性能要求高、硬件聯(lián)系比較密切的領(lǐng)域。在下面中主要探討三個問題:(1)c語言中指針的效率。(2)操作位段。(3)語言依靠指針實現(xiàn)算法。(4)指針幫助c語言簡化程序。(5)指針高級聲明。

        1c語言中指針的效率

        c語言可以說是高級語言中性能最快的,而其中指針是加快程序處理效率的保障。指針能使得c語言大大提高程序的性能,從下邊的例子來看:

        在函數(shù)參數(shù)傳遞中,如果傳遞的數(shù)據(jù)量比較大,函數(shù)執(zhí)行又很頻繁的話,使用指針就能夠大大提高程序的處理速度。以傳遞結(jié)構(gòu)為例:

        定義一個比較大的結(jié)構(gòu):

        這樣的處理效率是很低的,再加上NUM又很大的話對于內(nèi)核或者底層處理程序來說就是一場災(zāi)難。因為在c語言的參數(shù)傳值調(diào)用方式要求把參數(shù)的一份拷貝傳遞給函數(shù),如果NUM為1024,而且我們使用的機器上整型和浮點型都占用4個字節(jié),那么占有空間就很大了。每次調(diào)用函數(shù)都會把這個結(jié)構(gòu)復(fù)制到堆棧中,用了以后再丟棄。

        如果我們采用指針的傳遞,如下:

        這樣調(diào)用函數(shù)的時候就是把一個指向結(jié)構(gòu)的指針傳遞進去。指針比整個結(jié)構(gòu)小得多,所以把它壓到堆棧上效率就會提高很多。向函數(shù)傳遞指針的缺陷在于函數(shù)現(xiàn)在可以對調(diào)用程序的結(jié)構(gòu)變量進行修改,如果不希望如此,可以在函數(shù)中使用const關(guān)鍵字來防止這類修改。

        2 操作位段

        用指針操作位段能使得代碼閱讀更方便,更接近于思維。

        位段的聲明和任何其他普通的結(jié)構(gòu)成員聲明相同,但有兩個例外。首先,位段成員必須聲明為int、signed int或unsigned int類型。其次,在成員名的后面是一個冒號和一個整數(shù),這個整數(shù)指定該位段所占用的位的數(shù)目[1]。

        有以下位段操作:

        這樣可以在聲明如下結(jié)構(gòu):

        這樣通過下列訪問方式,就能更方便的訪問位段信息:

        3 語言依靠指針實現(xiàn)算法

        最廣為人知的就是鏈表的實現(xiàn)。有了指針,c語言實現(xiàn)鏈表就變的簡單,使用也很方便。比如下單向鏈表:

        是一個最簡單的單向鏈表,如果沒有指針的幫助,c語言要想實現(xiàn)也是很困難。使用指針可以很優(yōu)雅的實現(xiàn)鏈表:

        通過上述定義的struct就能很容易的實現(xiàn)鏈表,并且在鏈表的插入、刪除、遍歷都能很直觀的使用。其他涉及指針的算法就很多了,比如二叉樹、堆、隊列等等,c語言都能使用指針方便的實現(xiàn)。

        簡單介紹一下雙向鏈表的插入,能更深入的了解鏈表對于插入、刪除的方便性。雙鏈表的插入會出現(xiàn)三種情況:(1)新值可能插入中間位置。(2)新值可能插入鏈表頭。(3)新值可能插入鏈表尾。這里介紹新值插入中間位置的方法。

        插入的new只需要修改指針的順序就可以:

        4 指針幫助c語言簡化程序

        c語言沒有面向?qū)ο缶幊?,但是可以利用指針,模擬出來,簡化程序。比如最具代表性的是在linux內(nèi)核協(xié)議棧里,對于多協(xié)議的處理,可以采用同一段代碼來實現(xiàn),但是對于不同的傳輸協(xié)議,比如tcp、udp等使用的不同的處理函數(shù)。這里要靈活使用函數(shù)指針,大大簡化程序,提高效率。比如在Netfilter的處理中,對于不同傳輸協(xié)議都采用同一段代碼,首先注冊不同協(xié)議的處理函數(shù)。

        注冊tcp的處理函數(shù):

        在使用的時候只需要查找到該處理函數(shù)即可用同一段代碼處理不同的協(xié)議:

        使用該方法可以在整個程序的任何地方,只需要先查找是屬于何種處理方法,就能處理不同的函數(shù)。能使得同一段代碼,處理不同的事件,提高代碼效率。

        5 指針高級聲明

        高級的指針類型在linux內(nèi)核,以及一些底層軟件上面應(yīng)用很廣泛,雖然看上去會覺得比較難以理解,但是一旦理解以后編程會變得比較快捷。

        比如函數(shù)指針:

        從以上幾個函數(shù)指針可以看到,靈活這幾類指針對于函數(shù)的聲明,以及在面向?qū)ο蟮脑O(shè)計的時候都能應(yīng)用到。

        下面來分析兩個比較復(fù)雜的高級聲明:

        def是一個二級指針,它指向的是一個一維數(shù)組的指針,數(shù)組的元素都是int。

        int *(*def)[20];

        def是一個指針,它指向一個一維數(shù)組,數(shù)組元素都是int*。

        6 結(jié)語

        指針雖然有時候讓代碼看上去比較難以理解,但從以上幾個方面可以看到,不管是在執(zhí)行效率,對于硬件操作的支持,都具有無可比擬的威力,對我們在實現(xiàn)各種復(fù)雜的算法,直接處理硬件上面都提供了很大的方便。

        [1] Kenneth A.Reek.C和指針[M].北京:人民郵電出版社,2008.4

        [2] Benvenuti.C.深入理解LINUX網(wǎng)絡(luò)技術(shù)內(nèi)幕[M].北京:中國電力出版社,2009

        [3] W.Richard Stevens.TCP/IP 詳解 卷1:協(xié)議[M].北京:機械工業(yè)出版社,2007.8

        Understanding pointers in c language applications

        Tang ting

        Sichuan Vocational and Technical College, suining 629000 China

        This article describes the basic concepts of pointers, features, and the importance of clanguage. Pointer in c language describes the application of indepth understanding ofthe pointer in c programming language the status of occupied, and the master of these methods for future programming role.

        TP319

        A

        10.3969/j.issn.1001-8972.2012.10.061

        猜你喜歡
        鏈表指針代碼
        基于二進制鏈表的粗糙集屬性約簡
        偷指針的人
        娃娃畫報(2019年5期)2019-06-17 16:58:10
        跟麥咭學(xué)編程
        創(chuàng)世代碼
        動漫星空(2018年11期)2018-10-26 02:24:02
        創(chuàng)世代碼
        動漫星空(2018年2期)2018-10-26 02:11:00
        創(chuàng)世代碼
        動漫星空(2018年9期)2018-10-26 01:16:48
        創(chuàng)世代碼
        動漫星空(2018年5期)2018-10-26 01:15:02
        基于鏈表多分支路徑樹的云存儲數(shù)據(jù)完整性驗證機制
        為什么表的指針都按照順時針方向轉(zhuǎn)動
        基于改進Hough變換和BP網(wǎng)絡(luò)的指針儀表識別
        電測與儀表(2015年5期)2015-04-09 11:30:42
        手机av在线观看视频| 中国女人内谢69xxxx免费视频| 亚洲毛片αv无线播放一区| 黄又色又污又爽又高潮动态图| 亚洲AV乱码毛片在线播放| 一区二区三区国产亚洲网站| 国产精品一区二区三区播放| 久久婷婷五月综合97色直播| 国产成人av大片大片在线播放 | 99亚洲乱人伦精品| 亚洲国产av午夜福利精品一区| 日韩av一区二区不卡| 99精品国产成人一区二区| 久久综合精品国产二区无码| 国产精品偷伦免费观看的| 国产免费视频一区二区| 国产一区二区视频免费| 精品偷自拍另类在线观看| 国产精品无码久久久久久久久久| 久久精品无码一区二区三区蜜费 | 亚洲中文字幕高清av| 国产精品天干天干综合网| 国产精品免费看久久久8| 在线视频一区二区日韩国产| 亚洲一区精品一区在线观看| 亚洲一区二区三区激情在线观看| 日本动漫瀑乳h动漫啪啪免费| 无码av免费一区二区三区试看| 妺妺窝人体色www聚色窝韩国| 91精品国产乱码久久久| 日本伊人精品一区二区三区| av综合网男人的天堂| 免费无码国产v片在线观看| 亚洲一区不卡在线导航| 午夜少妇高潮在线观看视频| 亚洲成a人v欧美综合天堂| 日韩a无v码在线播放| 丰满人妻AV无码一区二区三区| 中文字幕一区二区三区| 日产精品99久久久久久| 日韩高清在线观看永久|