国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

C語言編程技術(shù)的分析研究

2017-04-25 09:41胡昊遼寧錦州渤海大學信息科學與技術(shù)學院
數(shù)碼世界 2017年4期
關(guān)鍵詞:存儲空間指針C語言

胡昊 遼寧錦州渤海大學信息科學與技術(shù)學院

C語言編程技術(shù)的分析研究

胡昊 遼寧錦州渤海大學信息科學與技術(shù)學院

C語言作為新型語言中的一種,被廣泛應用于計算機編程,是通用計算機編程語言,存在于電腦中的形式是一些命令指令,人和電腦之間的交流其實就是通過命令執(zhí)行實現(xiàn)的,由于C語言靈活性強,所以用來解決很多的繁瑣的難題,C語言在數(shù)學算術(shù)領(lǐng)域中都有著重大的應用,在一定程度加快了計算機的運算的速度和擴展了運算的范圍,此外C語言在生活中的應用也很廣泛,然而由于使用者沒有很好地掌握C語言的嚴謹性以及C語言的復雜性從而在具體的應用中出現(xiàn)了很多的問題。調(diào)試C語言代碼性的錯誤是一個繁瑣的過程,所以本文針對這個問題,進行了C語言編程技術(shù)的分析。

C語言編程 分析 技術(shù)

許多編程人員比較青睞于C語言編程,因為C語言的風格符合現(xiàn)代人的習慣,也符合模塊化的設(shè)計思想,同時C語言編程的層次分明,方便調(diào)試以及維護。正是因為C語言編程的特點是清晰、明了,同時可移植以及具有強大的功能等,所以C語言編程在很多的領(lǐng)域都得到了普遍的運用。C語言提供了很多低級處理的功能,并且擁有著很好的跨平臺特性,我們使用的標準規(guī)格編寫的C語言程序可以在很多平臺上進行編譯,在現(xiàn)今的軟件開發(fā)中,使用很普遍。目前在我國的很多計算機等級考試中的的考試內(nèi)容就圍繞著C語言。但是由于C語言編寫的特點是靈活性強,同時語法約束不強,所以很多的初學者在學習指針內(nèi)容時,就容易出現(xiàn)錯誤,如果指針使用錯誤,那么代碼的可讀性就比較差,同時運行效率也比較低。因此在后期的調(diào)試中,指針錯誤從而導致了很多的嚴重問題,而且這些問題解決起來也不是很容易。

1 編程技術(shù)

1.1 C語言中的函數(shù)

在C語言的編程過程中,通常會采用模塊化的思想,把一個復雜的程序,拆分成多個子程序進行完成,其中的每一個程序?qū)崿F(xiàn)一個子模塊功能,最終通過調(diào)用各個子模塊的接口,從而完成整個程序的整合。函數(shù)是能夠完成一定相關(guān)功能的執(zhí)行代碼段,可以將函數(shù)分為內(nèi)、外兩部分,外部負責數(shù)據(jù)輸送,并且輸送數(shù)據(jù)便能得到結(jié)果,而內(nèi)部便是由代碼段構(gòu)成的“運算器”,它負責將輸入的數(shù)據(jù)進行處理。每一個函數(shù)都實現(xiàn)了應有的功能在C語言的編程中,功能的實現(xiàn)是通過函數(shù)名反映的。C語言程序中,他的函數(shù)數(shù)量是無限的,但是,其中必須有一個并且僅有一個以“main”為名的主函數(shù)。通常情況下,需要注意的是函數(shù)定義包括的內(nèi)容有函數(shù)名、返回值類型以及參數(shù)名,然而由于C語言的編譯系統(tǒng)攜帶了很多的函數(shù)庫,這些函數(shù)庫中包括了很多的之前就已經(jīng)定義好的函數(shù),所以當需要實現(xiàn)某個功能的時候,只需要在代碼的開頭加上“#include”的指令就可以將函數(shù)庫中的函數(shù)調(diào)用出來。

1.2 算法技巧及位操作

算法被定義為:一系列解決問題的清晰指令。算法我們也可以理解為它是有基本運算及其規(guī)定的運算順序所組成的完整的運算步驟,它也是一個按照要求設(shè)計好的有限的確切的計算序列。一個算法它將擁有以下五個重要的特征:有窮性、確切性、輸入、輸出、可行性。在設(shè)計程序的過程中,程序的靈魂離不開算法,如何掌握算法的技巧對于編程人員至關(guān)重要。算法的表示方法主要分為了流程圖與自然語言,當編程人員采用流程圖的形式表述算法思路的時候,需要事先對流程圖中的各個符號有所掌握。在計算機的程序設(shè)計過程中,位運算是可操作的最小數(shù)據(jù)單位,通常情況在,要想實現(xiàn)算法的除法或者是乘法,可以通過位運算實現(xiàn),從而大大提高代碼的運行速率。因為計算機的數(shù)據(jù)都是以二進制的形式儲存,位運算就是直接對內(nèi)存中存儲的二進制數(shù)據(jù)進行操作,因此十分快捷。位運算的基礎(chǔ)操作符有以下六種“&、|、^、~、<<、>>”,在這六種操作符中,只有“~”取反是單目操作符,其余“&、|、^、<<、>>”五種均為雙目操作符。而且,在使用過程中,一定需要注意:位操作只作用于整形數(shù)據(jù),“double、float”類型數(shù)據(jù)都會出現(xiàn)錯誤。

使用位操作時,由于位操作符運算優(yōu)先級低,為了保證它的運算順序,我們通常使用括號來使它運算正常,否則得出的結(jié)果啼笑皆非。比如我們現(xiàn)在要得到一組等差數(shù)列數(shù)據(jù):1,3,5,7,9……。如果我們寫成int a=1<

2 指針用法

在C語言中指針是一個十分重要的數(shù)據(jù)類型,同時C語言重要內(nèi)容之一是指針。將指針運用到C語言的編程中能夠大大地提高代碼的運行效率,同時還可以大大地節(jié)省代碼的存儲空間,然而指針對于很多的初學者而言有一定的難度。一旦沒有正確掌握指針的用法,那么在代碼運行的過程中就會引發(fā)很多的問題。指針所指向的是存儲空間,而存儲空間的分配方式能夠分為靜態(tài)和動態(tài)分配兩種。所謂的靜態(tài)分配指的是當C程序在編寫的時候存儲空間就已經(jīng)確定下來了。當選擇全局變量的時候,比如static char b[sizes],指的是分配給變量b的空間是sizes比如定義的是一個局部變量char c[sizes],那么在函數(shù)執(zhí)行的過程中,局部變量b所得到的空間是sizes,當調(diào)用函數(shù)結(jié)束后變量b的存儲空間就會被自動釋放。所謂的動態(tài)分配指的是通過庫函數(shù)malloc (sizes)堆中的調(diào)用從而給變量分配的空間是sizes,當結(jié)束調(diào)用后返回的值類型是指針,在編程的過程中一定要記住,當時存儲空間使用結(jié)束后,一定要記得通過free()函數(shù)釋放空間。使用C語言進行代碼的編程時候,必須要正確掌握指針的用法,不然如果使用錯誤,就會出現(xiàn)一系列的錯誤,這些錯誤具體總結(jié)如下:

(1)當使用C語言編程,定義指針變量的時候,沒有給指針賦初值,從而使得該指針變量成為了一個“野指針”。所以在當后面用到了這個指針所指向的空間的時候,就會出現(xiàn)代碼性的錯誤,由于指針變量定義后,指針變量所對應的值是未知的,也就是說指針可以指向任意一個內(nèi)存地址,這個時候指針所指向的內(nèi)存直接完成賦值操作,把這個單元里最初的數(shù)據(jù)覆蓋掉,從而造成了數(shù)據(jù)的缺失,如果指針指向系統(tǒng)的數(shù)據(jù)區(qū),那么會造成系統(tǒng)運行出現(xiàn)異常,最壞的情況是出現(xiàn)了系統(tǒng)死機。所以,在使用C語言編程代碼的時候一定要給指針變量賦值,保證正確使用指針。

(2)指針空間分配使用的語句為q=malloc(size),需要先檢查參數(shù)q,如果p=NULL那么說明了這個存儲空間為空,這個時候就不可以操作p所指向的空間,即便是分配了空間給p,其空間必須是C語言所規(guī)定的空間范圍之內(nèi)。當空間運用結(jié)束后,必須要通過free函數(shù)釋放該空間,不然容易造成存儲空間耗盡的情況。

(3)棧溢出。棧的作用主要是用于當一個子函數(shù)被調(diào)用的時候,完成現(xiàn)場的保存以及現(xiàn)場的恢復,同時還包括了局部變量的參數(shù)傳遞以及局部變量的存儲等然而在調(diào)用子函數(shù)中,當錯誤使用子函數(shù)里面的局部變量指針,就會產(chǎn)生棧溢出的現(xiàn)象。比如子函數(shù)的代碼如下:

char point1[10];

strcpy(point1,“ warning: this is a testing case ...”);

因為在這個棧中只分配了10個字節(jié)空間給局部變量,但是使用函數(shù)strcpy()的時候,指針point1指向的超過了10個字節(jié)的字符串,所以這個時候很可能會重寫把棧中所存放的函數(shù)返回地址的內(nèi)容,因此在執(zhí)行完子函數(shù)之后原來的函數(shù)就很難回去了,執(zhí)行將會終止。

(4)堆溢出。使用堆的時候需要考慮到代碼運行的平臺的以及編譯器,堆溢出是一個很復雜的過程。比如程序代碼:

char * point1;

point1=(char *) malloc(10);

strcpy(point1,“warning: this is a testing case ..”);

由于point1指針定義中,所分配的是10個字節(jié)空間,但是當在執(zhí)行函數(shù)strcpy()的時候指針point1指向的是超過了10的字符串,所以造成了堆溢出,從而導致程序報錯。

(5)void用法。在定義函數(shù)的時候,如果函數(shù)名前面有void,那么意味著這個函數(shù)的返回值是空,然而這種情況除了庫函數(shù)void malloc(size)之外,這個函數(shù)名的前面也有void,但是這并不意味著malloc(size)的返回值是空,而是意味著函數(shù)的返回值能夠轉(zhuǎn)換成任意其他的類型地址值(比如string* ,float *,long *等)。void不可以用在數(shù)值變量的定義過程中,然而指針變量的定義能夠用void來實現(xiàn),void的真正意思是指針變量能夠指向所有的數(shù)據(jù)類型的地址。

(6)在使用過程中,區(qū)分數(shù)組是不同于指針變量的,可以通過指針加減數(shù)值來實現(xiàn)指針的位置移動,比如q+=9,指的是將指針q的位置往后面移動9個位置;但是數(shù)組名是可以移動的,比如char a[22];a++;不可以這樣操作數(shù)組a。

(7)當移動指針的時候,挪動的位移和所定義的指針類型是有關(guān)系的,比如分別將指針p與q定義成:char*p;int*q;后續(xù)的語句:p+=20;q+=20;那么這意味著字符型指針p是往后面移動了20個字節(jié),同時整型指針q往后面移動了20個長度,也就是80個字節(jié)。使用指針變量的時候一定要保證和所定義的類型是一樣的。

(8)需要注意所定義的指針變量的區(qū)別。比如定義為:int(* p) [20]和int* p[20],這兩者之間是有區(qū)別的,int(* p) [20]中的(* p)為先,因p指的是一個指針變量,指向了包含有20個整型數(shù)的數(shù)組;同時int * p[20]代表著p[20]為先,所以指的是定義了指針數(shù)組p,該變量它包括了20個指向整型數(shù)組的指針元素。

3 優(yōu)化編程方法

C語言編程方法能夠大大地增強程序的運行效率以及代碼的可讀性。下面將對C語言編程優(yōu)化進行簡單地描述。

當調(diào)用函數(shù)的時候傳遞結(jié)構(gòu)是被禁止的。函數(shù)調(diào)用第一步是把參數(shù)傳遞給寄存器或者堆棧,當函數(shù)參數(shù)在傳遞的過程中,內(nèi)容是結(jié)構(gòu)的話,那么C語言編譯器就要把整個結(jié)構(gòu)全部拷貝到到堆棧中,從而造成了堆??臻g負擔,這個時候能夠通過采取結(jié)構(gòu)指針減少空間的負荷。在C語言編程中編程效率的優(yōu)化可以通過C語言中自帶的庫函數(shù)實現(xiàn)。然而,由于在設(shè)計的時候這些標準庫具有自身的廣泛適用性,所以該函數(shù)庫的使用是有約束條件的。而且即使是使用了函數(shù)庫,由于代碼量大,所以很容易造成,代碼運行效率低的結(jié)果。比如庫函數(shù)srPintf()的實現(xiàn)就是通過許多的代碼完成的,在編程中如果編程人員調(diào)用的srPintf()函數(shù)是不包括浮點處理(%f),最好是編程人員自己設(shè)計代碼完成整個功能,這樣可以大大提高代碼效率。

結(jié)語:采用C語言進行編程的軟件有著很大的開發(fā)前景,針對C語言編程有很多方面都需要引起注意,對C語言進行優(yōu)化可以大大地提高C語言的運行效率,編程人員要想正確掌握C語言的編程,需要多多地理論聯(lián)系實踐,多多地參與編程的實踐中,并且對C語言的編程方法不斷進行優(yōu)化處理,從而增強C語言的編程可讀性以及可移植性。C語言在眾多的領(lǐng)域中都有著重大的意義,所以正確掌握C語言是十分必要的。本文主要針對C語言編程技術(shù)進行了分析,介紹了C語言函數(shù),指針正確使用以及C語言優(yōu)化等方面。

[1]潘津.C語言編程技巧在C語言學習中的應用研究[J].電子技術(shù)與軟件工程,2013(16):218-218

[2]侯成杰.航天器C語言軟件常見編程錯誤分析及檢測方法研究[J].空間控制技術(shù)與應用,2013,39(6):53-57

[3]劉秀明.基于C語言的計算機軟件編程實驗研究[J].電子技術(shù)與軟件工程,2014(5):263-263

[4]祁昌平.C語言程序設(shè)計 課程教學探討[J].電腦知識與技術(shù),2009,5(17):4488-4489

猜你喜歡
存儲空間指針C語言
基于多種群協(xié)同進化算法的數(shù)據(jù)并行聚類算法
蘋果訂閱捆綁服務(wù)Apple One正式上線
垂懸指針檢測與防御方法*
基于Visual Studio Code的C語言程序設(shè)計實踐教學探索
用好Windows 10保留的存儲空間
51單片機C語言入門方法
基于C語言的計算機軟件編程
為什么表的指針都按照順時針方向轉(zhuǎn)動
高職高專院校C語言程序設(shè)計教學改革探索
淺析C語言指針
吉林市| 桃源县| 雅江县| 萨迦县| 翁源县| 古交市| 白玉县| 浦江县| 营山县| 丹东市| 施秉县| 巴林右旗| 毕节市| 盘山县| 泸定县| 清涧县| 霍州市| 峨山| 沧州市| 双辽市| 黄浦区| 英超| 固阳县| 安国市| 和硕县| 城固县| 泸溪县| 垦利县| 永嘉县| 西和县| 聊城市| 景宁| 祁阳县| 承德县| 海阳市| 错那县| 故城县| 灌南县| 陆河县| 浦县| 武穴市|