999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

深入理解指針在C語言中的應用

2012-11-14 04:31:44唐婷
中國科技信息 2012年10期
關鍵詞:程序語言

唐婷

四川職業技術學院計算機科學系,四川 遂寧 629000

深入理解指針在C語言中的應用

唐婷

四川職業技術學院計算機科學系,四川 遂寧 629000

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

c語言;指針;算法

c language; Pointer; Algorithm

前言

在計算機工程中指針是一個用來指示一個內存地址的計算機語言的變量。指針常常出現在比較靠近機器語言的環境,這樣能更好地為底層軟件的編寫提供支持。指針一般指向一個函數或一個變量。在使用一個指針時,一個程序既可以直接使用這個指針所儲存的內存地址,又可以使用這個地址里儲存的變量或函數的值。

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

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

1c語言中指針的效率

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

在函數參數傳遞中,如果傳遞的數據量比較大,函數執行又很頻繁的話,使用指針就能夠大大提高程序的處理速度。以傳遞結構為例:

定義一個比較大的結構:

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

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

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

2 操作位段

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

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

有以下位段操作:

這樣可以在聲明如下結構:

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

3 語言依靠指針實現算法

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

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

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

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

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

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

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

注冊tcp的處理函數:

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

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

5 指針高級聲明

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

比如函數指針:

從以上幾個函數指針可以看到,靈活這幾類指針對于函數的聲明,以及在面向對象的設計的時候都能應用到。

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

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

int *(*def)[20];

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

6 結語

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

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

[2] Benvenuti.C.深入理解LINUX網絡技術內幕[M].北京:中國電力出版社,2009

[3] W.Richard Stevens.TCP/IP 詳解 卷1:協議[M].北京:機械工業出版社,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

猜你喜歡
程序語言
語言是刀
文苑(2020年4期)2020-05-30 12:35:30
試論我國未決羈押程序的立法完善
人大建設(2019年12期)2019-05-21 02:55:44
讓語言描寫搖曳多姿
失能的信仰——走向衰亡的民事訴訟程序
“程序猿”的生活什么樣
多向度交往對語言磨蝕的補正之道
英國與歐盟正式啟動“離婚”程序程序
環球時報(2017-03-30)2017-03-30 06:44:45
累積動態分析下的同聲傳譯語言壓縮
創衛暗訪程序有待改進
中國衛生(2015年3期)2015-11-19 02:53:32
我有我語言
主站蜘蛛池模板: 国产玖玖视频| 青青草原国产免费av观看| 亚洲欧美成人综合| 97国产精品视频自在拍| 18禁色诱爆乳网站| 制服丝袜 91视频| 欧美特级AAAAAA视频免费观看| 国产幂在线无码精品| 亚洲综合婷婷激情| 91丨九色丨首页在线播放| 色噜噜狠狠狠综合曰曰曰| 99久久精品免费视频| 国产精品3p视频| 日本精品影院| 伊人五月丁香综合AⅤ| 2021国产精品自产拍在线| 国产91av在线| 亚洲色大成网站www国产| 99热国产在线精品99| 日韩成人午夜| 九一九色国产| 午夜日b视频| 国产主播福利在线观看| 国产欧美视频在线| 国产又粗又猛又爽视频| 亚洲国产成人精品青青草原| 在线不卡免费视频| 最新精品国偷自产在线| 真实国产精品vr专区| 青青久视频| 亚洲欧美自拍中文| 国产精品三级专区| 久久这里只有精品66| 久久久久夜色精品波多野结衣| 秋霞国产在线| 欧美综合区自拍亚洲综合天堂| 91娇喘视频| 免费在线色| 91成人在线观看| 久久国产精品夜色| 日本午夜在线视频| 老色鬼久久亚洲AV综合| 亚洲综合天堂网| 一区二区三区精品视频在线观看| 精品一区国产精品| 国产精品污视频| 91久久大香线蕉| 54pao国产成人免费视频| 91视频99| 亚洲人成网站在线观看播放不卡| A级毛片无码久久精品免费| 视频一本大道香蕉久在线播放| A级毛片无码久久精品免费| 欧美日韩国产精品综合| 日韩国产一区二区三区无码| 久久黄色免费电影| 伊人久久久久久久久久| 久久久噜噜噜| 亚洲综合香蕉| 国产精品密蕾丝视频| 日韩欧美中文亚洲高清在线| 久久熟女AV| 欧美亚洲网| 国产一级小视频| 亚洲国产成熟视频在线多多| 亚洲精品桃花岛av在线| 国产一级精品毛片基地| 日本欧美成人免费| 亚洲欧美日本国产专区一区| 精品一区二区三区波多野结衣| 亚洲精品无码久久久久苍井空| 99无码中文字幕视频| 欧美精品在线观看视频| 在线va视频| 免费国产福利| 欧美日韩一区二区在线播放| 一级爱做片免费观看久久| 青青青草国产| 无码中文字幕精品推荐| 国产精品亚洲一区二区三区z| 中文字幕首页系列人妻| a毛片基地免费大全|