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

        ?

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

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

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

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

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

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

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

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

        1 編程技術(shù)

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

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

        1.2 算法技巧及位操作

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

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

        2 指針用法

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

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

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

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

        char point1[10];

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

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

        (4)堆溢出。使用堆的時(shí)候需要考慮到代碼運(yùn)行的平臺(tái)的以及編譯器,堆溢出是一個(gè)很復(fù)雜的過(guò)程。比如程序代碼:

        char * point1;

        point1=(char *) malloc(10);

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

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

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

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

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

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

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

        C語(yǔ)言編程方法能夠大大地增強(qiáng)程序的運(yùn)行效率以及代碼的可讀性。下面將對(duì)C語(yǔ)言編程優(yōu)化進(jìn)行簡(jiǎn)單地描述。

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

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

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

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

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

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

        猜你喜歡
        存儲(chǔ)空間指針代碼
        基于多種群協(xié)同進(jìn)化算法的數(shù)據(jù)并行聚類算法
        蘋(píng)果訂閱捆綁服務(wù)Apple One正式上線
        用好Windows 10保留的存儲(chǔ)空間
        偷指針的人
        創(chuàng)世代碼
        創(chuàng)世代碼
        創(chuàng)世代碼
        創(chuàng)世代碼
        為什么表的指針都按照順時(shí)針?lè)较蜣D(zhuǎn)動(dòng)
        基于改進(jìn)Hough變換和BP網(wǎng)絡(luò)的指針儀表識(shí)別
        国产精品18久久久久久麻辣| 伊人精品成人久久综合97| 亚洲av成人一区二区| 人人妻人人澡人人爽人人精品av| 人妻少妇精品中文字幕av| 精品综合久久久久久97超人| 久久99亚洲综合精品首页| 亚洲国产天堂av成人在线播放 | 日本超级老熟女影音播放| 免费的黄网站精品久久| 亚洲成人av一区免费看| 国产精品婷婷久久爽一下| 小鲜肉自慰网站| 中文字幕精品一区二区2021年| 国产精品无码Av在线播放小说| 视频一区视频二区亚洲免费观看| 国产又黄又湿又爽的免费视频| 手机在线观看av资源| 久久精品中文字幕无码绿巨人 | 久久久久亚洲精品无码网址蜜桃 | 有坂深雪中文字幕亚洲中文| 国产老熟女网站| 国产免费av片在线观看| 精品高潮呻吟99av无码视频| 揄拍成人国产精品视频肥熟女 | 欧美z0zo人禽交欧美人禽交| av日本一区不卡亚洲午夜| 成人做爰黄片视频蘑菇视频| 国产亚洲精品国产精品| 人禽交 欧美 网站| 天美麻花果冻视频大全英文版 | 国产精品久久久久国产a级| 亚洲伊人一本大道中文字幕 | 夜夜躁狠狠躁日日躁视频| 无码一区二区三区中文字幕| 女女女女女裸体处开bbb| 少妇熟女视频一区二区三区| 亚洲粉嫩av一区二区黑人| 国产精品一区二区偷拍| 内射人妻少妇无码一本一道| 精品久久久久久无码国产|