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

        ?

        C語言程序設(shè)計課程教學(xué)探討

        2009-12-30 03:41:40
        計算機教育 2009年21期

        楊 波

        摘要:指針是C語言中的重要語言元素,利用它可進行動態(tài)內(nèi)存分配、直接訪問內(nèi)存及表示復(fù)雜的數(shù)據(jù)結(jié)構(gòu)等操作。作為指針中特殊的一類,空指針在程序設(shè)計的實踐中具有不可替代的作用。本文簡要介紹了C語言中空指針的概念及用途,并對其相關(guān)特性及易混淆的相關(guān)概念進行了討論。

        關(guān)鍵詞:C語言;空指針;NULL

        中圖分類號:G642 文獻標(biāo)識碼:B

        1引言

        指針在C語言編程中占有非常重要的地位,使用指針可對內(nèi)存進行動態(tài)分配、直接訪問內(nèi)存以及表示復(fù)雜的數(shù)據(jù)結(jié)構(gòu)等。正確而靈活地使用指針可編寫出優(yōu)質(zhì)的程序,可以說指針充分體現(xiàn)了C語言的優(yōu)點。但由于指針具有高度的靈活性,對它的完全掌握也較為困難。

        在某些場合下會使用到一種稱為空指針的指針,由于這種指針在程序中不以普通指針的形式出現(xiàn),并沒有對它進行顯式的定義或賦值,所以常常被忽視,但作為指針的一類,空指針這一概念卻是不應(yīng)該被忽略或混淆的。

        那么,什么是空指針呢?

        2空指針的概念

        空指針是一種不指向任何對象的指針,它的值為NULL。NULL在中是這樣定義的:

        #define NULL0

        或:

        #define NULL 0L

        也即是說,NULL的值是一個純粹的零,這樣,空指針就與普通指針有了區(qū)別:空指針的值是一個整型值,而普通指針值是不允許是整型值的。但這個純粹的零需要時可以被強制轉(zhuǎn)換成void *或char *類型。

        3空指針的用途

        3.1用作函數(shù)調(diào)用失敗時的返回值

        某些函數(shù)的返回值是一個指針,若函數(shù)調(diào)用成功,返回一個指向某一對象的指針;反之則返回一個空指針。很多C庫函數(shù)在調(diào)用失敗時的返回值就是一個指針,如:

        #include

        main( )

        {char *string[5];

        int i=0;

        while(i<5)

        {if((string[i]=(char *)malloc(32))= = NULL)

        { printf(“failure”);

        exit(0);

        }

        else

        gets(string[i];

        i++;

        }

        for(i=0;i<5;i++)free(string[i]);

        }

        這個程序中定義了一個指針數(shù)組分別指向五個字符串,這五個字符串的存儲位置在是程序執(zhí)行過程中調(diào)用malloc( )函數(shù)動態(tài)分配得到的,若分配失敗,malloc( )函數(shù)的返回值即為一個空指針,程序中if語句的條件就是以判斷malloc( )函數(shù)的返回值是否為空指針來確定程序的流向。

        3.2用來終止對遞歸數(shù)據(jù)結(jié)構(gòu)的間接引用

        單鏈表是一種常見的遞歸數(shù)據(jù)結(jié)構(gòu),其結(jié)構(gòu)非常簡單,包含一個值域和一個指向鏈表中下一個元素的指針域。下面以一個只含一個整型數(shù)據(jù)域的單鏈表為例:

        struct linklist

        {intdata;

        struct linklist*next;

        };

        在這樣一個鏈表中,通過指向第一個元素的指針(頭指針)開始引用該鏈表,并通過每個元素的指針不斷引用下一個元素,將鏈表中最后一個元素的指針賦值為NULL,用以控制對該鏈表引用的終止。如下例是對如上定義的單鏈表求其長度的函數(shù):

        int length(struct linklish *head)/*head為頭指針,函數(shù)結(jié)果用i返回*/

        {struct linklist *p;p=head;

        int i=0;

        while(p!=NULL)

        {p=p->next;

        ++i; }

        return(i);

        }

        在本例中,while循環(huán)的執(zhí)行條件“p!=NULL”判斷指針p是否移動到鏈表尾,若該條件不成立,表示已到鏈表最后一個元素,終止對鏈表的引用。

        3.3用作main函數(shù)形參argv[ ]的結(jié)束警戒值

        一般情況下main函數(shù)是不帶參數(shù)的,但有時它可有兩個形參:argc和argv[ ]。一個帶形參的main函數(shù)如下例:

        #include

        main(argc, argv)

        int argc;

        char *argv[ ];

        { int i=0;

        while(argv[i]!=NULL)

        {printf(“argv[%d]=%s ”,i, argv[i]);

        i++;}

        }

        其中argc是指在操作命令狀態(tài)下執(zhí)行main函數(shù)時命令行中參數(shù)的個數(shù),argv[ ]則是一個指針數(shù)組,指向命令行各參數(shù)字符串的首地址。

        若該函數(shù)編譯后生成的可執(zhí)行文件名為file,則可在操作命令狀態(tài)下輸入如下命令行:

        filepara1para2para3

        則argc的值為4(文件名也看作一個參數(shù)),argv[0]指向命令行中第一個字條串“file”,argv[1]指向“para1”,argv[2]指向“para2”,argv[3]指向“para3”,實際上還有一個argv[4],其值即為NULL。該程序的功能是依次輸出命令行中的各參數(shù)字符串,while循環(huán)體的執(zhí)行條件是“argv[i]!=NULL”,該循環(huán)體執(zhí)行四次依次輸出命令行中四個參數(shù)字符串后,到達指針數(shù)組的最后一個元素argv[4],其值為空,循環(huán)終止。

        4關(guān)于空指針的討論

        4.1空指針與void指針的區(qū)別

        空指針與void指針是完全不同的,前面已經(jīng)說明空指針是不指向任何對象的,而void指針卻需指向某個對象,只是這個被指向的對象是不屬于任何類型的,void指針在需要時可與其它類型的指針互換。

        void指針常用作指向函數(shù)的指針,而這對空指針而言是不可想象的。

        4.2空指針的值是否總是為0

        對于空指針的值是否總是為0這一問題,如果理解為“NULL與0比較,結(jié)果相等”,那么回答是肯定的,也就是說NULL總是等于0;但是如果將這一問題理解為“其存儲方式總是與整型值0相同”,則并不一定,因為就存儲方式而言,不同類型的“0”顯然是不同的,所以程序中若在需要時將NULL的值強制轉(zhuǎn)換成void *或char *類型后,其存儲方式必然與整型的0不同了,一個字符型的0在內(nèi)存中存放的是其ASCII代碼的值(048),一般而言占用一個字節(jié),而一個整型的0在內(nèi)存中存放就是其本身的值(0),則所占字節(jié)數(shù)隨編譯系統(tǒng)的不同而不同,一般為兩個字節(jié),因此,在這種意義下則可說空指針的值并不一定總是為0。

        4.3NULL與NUL的不同

        前面在說明空指針的概念時已經(jīng)知道NULL是在中定義的一個宏,其值為0或0L。而NUL則是指ASCII中第一個字符----空字符

        国产亚洲欧美另类第一页| av新型国产在线资源| 中国亚洲一区二区视频| 国色天香精品一卡2卡3卡4| 国产综合久久久久| 亚洲国产精品久久久久秋霞1 | 成人性生交大片免费看r| 国产在视频线精品视频二代| 日本午夜理论一区二区在线观看| 精品国产天堂综合一区在线 | 在线免费欧美| 国产激情视频在线观看首页| 亚洲国产精品成人久久久| aaa级久久久精品无码片| 国产精品久久久久免费a∨| 免费国人成人自拍视频| 国产精品丝袜美女久久| 国产三级a三级三级| 18成人片黄网站www| 欧美在线播放一区二区| 久久精品中文字幕免费| 亚洲av熟女少妇久久| 无码人妻av一区二区三区蜜臀 | 亚洲av电影天堂男人的天堂| 国内视频偷拍一区,二区,三区| 被驯服人妻中文字幕日本| 在线观看国产视频你懂得| 消息称老熟妇乱视频一区二区| 波多野结衣免费一区视频| 熟妇与小伙子露脸对白| 风韵犹存丰满熟妇大屁股啪啪 | 小12箩利洗澡无码视频网站| 久久亚洲精彩无码天堂 | 无码人妻人妻经典| 97国产免费全部免费观看| 免费国产自拍视频在线观看| 成人欧美一区二区三区黑人| 性色av 一区二区三区| 国产精品美女久久久久浪潮AVⅤ| 国产熟女一区二区三区不卡| 中文亚洲欧美日韩无线码|