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

C語言程序設計課程教學探討

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

楊 波

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

關鍵詞:C語言;空指針;NULL

中圖分類號:G642 文獻標識碼:B

1引言

指針在C語言編程中占有非常重要的地位,使用指針可對內存進行動態分配、直接訪問內存以及表示復雜的數據結構等。正確而靈活地使用指針可編寫出優質的程序,可以說指針充分體現了C語言的優點。但由于指針具有高度的靈活性,對它的完全掌握也較為困難。

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

那么,什么是空指針呢?

2空指針的概念

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

#define NULL0

或:

#define NULL 0L

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

3空指針的用途

3.1用作函數調用失敗時的返回值

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

#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]);

}

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

3.2用來終止對遞歸數據結構的間接引用

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

struct linklist

{intdata;

struct linklist*next;

};

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

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

{struct linklist *p;p=head;

int i=0;

while(p!=NULL)

{p=p->next;

++i; }

return(i);

}

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

3.3用作main函數形參argv[ ]的結束警戒值

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

#include

main(argc, argv)

int argc;

char *argv[ ];

{ int i=0;

while(argv[i]!=NULL)

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

i++;}

}

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

若該函數編譯后生成的可執行文件名為file,則可在操作命令狀態下輸入如下命令行:

filepara1para2para3

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

4關于空指針的討論

4.1空指針與void指針的區別

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

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

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

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

4.3NULL與NUL的不同

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

主站蜘蛛池模板: 91精品人妻一区二区| 亚洲无码视频图片| 欧美激情第一欧美在线| 国产成人免费| 日韩欧美国产精品| a在线观看免费| 色婷婷丁香| www成人国产在线观看网站| 亚洲欧美色中文字幕| 日韩欧美色综合| 久久影院一区二区h| 免费一看一级毛片| 亚洲精品无码久久久久苍井空| 国产精品不卡永久免费| 国产精品私拍在线爆乳| 国产主播在线观看| 在线欧美一区| 精品少妇三级亚洲| 99视频在线看| 中文字幕首页系列人妻| 国产福利在线免费| 亚洲男人天堂2020| 澳门av无码| 在线无码九区| 四虎亚洲国产成人久久精品| 亚洲国产综合自在线另类| 中文字幕亚洲精品2页| 狠狠色丁婷婷综合久久| 久久一日本道色综合久久| 97精品久久久大香线焦| 茄子视频毛片免费观看| 秋霞午夜国产精品成人片| 少妇精品在线| 日韩色图区| 亚洲国产中文欧美在线人成大黄瓜| 99re在线免费视频| 亚洲成a人在线观看| 人妻无码中文字幕一区二区三区| 91亚洲国产视频| 欧美日韩精品在线播放| 欧美无遮挡国产欧美另类| 色综合五月| 国产乱子伦视频在线播放 | 亚洲国模精品一区| 欧美在线视频不卡第一页| AV不卡国产在线观看| 日韩精品无码不卡无码| 国产精品久久久免费视频| 国内精品久久久久鸭| 国产成人精品无码一区二 | WWW丫丫国产成人精品| 国产精品区视频中文字幕| 国产97色在线| 国产午夜小视频| 三上悠亚在线精品二区| 国产视频欧美| 国产欧美一区二区三区视频在线观看| 蝴蝶伊人久久中文娱乐网| 国产成人免费观看在线视频| 伊人精品视频免费在线| 99这里只有精品免费视频| 亚洲一区国色天香| 亚洲人成电影在线播放| 无码日韩人妻精品久久蜜桃| 免费无码又爽又黄又刺激网站 | 青青草原偷拍视频| 亚洲国产中文综合专区在| 第一页亚洲| 欧美视频免费一区二区三区 | 亚洲一级无毛片无码在线免费视频 | 国产成人调教在线视频| 国产草草影院18成年视频| 91精品专区| 久久一本日韩精品中文字幕屁孩| 精品自拍视频在线观看| 久操中文在线| 国产精品亚洲αv天堂无码| 浮力影院国产第一页| 国产在线观看人成激情视频| 免费又爽又刺激高潮网址 | 欧美啪啪一区| 久久永久精品免费视频|