摘要:指針在C語言中具有重要的地位,也是初學(xué)者最不容易掌握的內(nèi)容。本文首先介紹了計(jì)算機(jī)的存儲機(jī)制,在此基礎(chǔ)上介紹了指針的概念,并給出了幾個(gè)典型的指針應(yīng)用的例子,說明了指針的方法。
關(guān)鍵詞:C語言;指針;教學(xué)探索
中圖分類號:G642.0 ?搖文獻(xiàn)標(biāo)志碼:A 文章編號:1674-9324(2014)06-0233-03
指針在C語言中具有重要的地位,也是C語言教學(xué)中學(xué)生最難掌握的內(nèi)容,一個(gè)學(xué)生是否學(xué)會了C語言,從他是否掌握了指針就可以大體上做出評判。本文重點(diǎn)探討一下C語言在指針教學(xué)中的要點(diǎn)和體會。
一、計(jì)算機(jī)的存貯機(jī)制
在教學(xué)中我們發(fā)現(xiàn),一些學(xué)習(xí)過計(jì)算機(jī)原理、匯編的同學(xué),對指針的概念比較容易理解,掌握的也比較快,即便遇到一些比較復(fù)雜的指針關(guān)系,也往往能夠通過自己的思考,給出正確的解釋。究其原因,就是因?yàn)檫@些同學(xué)對計(jì)算機(jī)的存儲機(jī)制比較了解,可以將指針與存儲對應(yīng)起來。為此,我們先簡要介紹一下計(jì)算機(jī)的存儲機(jī)制。在計(jì)算機(jī)中,數(shù)據(jù)以二進(jìn)制的形式存儲在內(nèi)存中,內(nèi)存的基本單位是字節(jié),一個(gè)字節(jié)由8位二進(jìn)制組成,一個(gè)數(shù)可以由一個(gè)字節(jié)表示,也可以由多個(gè)字節(jié)組合在一起表示,與具體的數(shù)值類型有關(guān)。比如,一般來說一個(gè)字符用一個(gè)字節(jié)表示就可以了,而一個(gè)整數(shù)則一般由多個(gè)字節(jié)表示,比如2個(gè)字節(jié)或4個(gè)字節(jié)等。具體由幾個(gè)字節(jié)表示,與具體的C語言編譯器有關(guān)。為了敘述方便,在以下的討論中我們假定字符是一個(gè)字節(jié),而整數(shù)是兩個(gè)字節(jié)。
內(nèi)存中每個(gè)字節(jié)都有一個(gè)編號,通常稱為該字節(jié)的地址,用于指定該字節(jié)。就好比我們通常用號碼對賓館的房間進(jìn)行編號一樣。地址的長度也是與編譯器有關(guān)的,在這里我們假定地址的長度為4個(gè)字節(jié)。圖1給出了一個(gè)內(nèi)存存儲的示意圖。同樣為了敘述方便,無論是地址還是數(shù)據(jù)我們都使用的是十進(jìn)制或者直接使用字符,而實(shí)際上應(yīng)該是二進(jìn)制的。在圖1中,左邊的表示地址,右邊的表示存儲的內(nèi)容。在1000~1001這兩個(gè)地址中,存儲的分別是字符a、b,每個(gè)各種一個(gè)字節(jié)。1002和1004開始的兩個(gè)字節(jié),存儲的分別是123和456兩個(gè)整數(shù)。2010、2014和2018開始的4個(gè)字節(jié),分別存儲了1003、1000和2010,其含義我們在后面再介紹。在C語言中,一個(gè)變量是與一個(gè)地址所對應(yīng)的,比如,如果定義了變量:int n,m;則編譯器會自動為n、m分別分配一個(gè)地址,變量n、m的值就分別存儲在它們所對應(yīng)的地址中。
二、指針的基本概念
什么是指針?簡單地說指針就是其值為地址的變量。一個(gè)指針變量的值是某個(gè)地址,該變量所指向的內(nèi)容,則是該地址中所存儲的內(nèi)容。如同整型變量一樣,指針變量也是一個(gè)變量,只不過整型變量的值是整數(shù),而指針變量的值是一個(gè)指針,也就是說是一個(gè)地址,通過該地址可以找到指針?biāo)赶虻膬?nèi)容。下面討論中,指針變量我們簡稱為指針。我們先通過一個(gè)類比的例子來說明指針的概念。假設(shè)某賓館有101、102……等房間,這些房間中,有些是住人的,比如101房間住的是張三,102房間住的是李四,則可以認(rèn)為101房間的值是張三,102房間的值是李四。這個(gè)賓館有些奇怪,除了住人的房間外,還有一些房間并不住人,里面只是有一個(gè)牌子,上面寫著某個(gè)房間號。比如說,105這個(gè)房間,里面的牌子上寫著102。那么105房間就可以認(rèn)為對應(yīng)一個(gè)指針變量,其值是一個(gè)地址102,該指針?biāo)赶虻闹担褪?02房間的李四。這里要區(qū)分出指針自己的值以及指針?biāo)赶虻闹怠T谠摾又校?05房間(指針)自己的值是102,其指向的值是李四。結(jié)合圖1的例子,我們假設(shè)有以下定義:int *p1;char *p2;假設(shè)編譯器為p1、p2分別分配的地址是圖1中的2010和2014,則p1的值是1002,是一個(gè)地址,而p1所指向的內(nèi)容,即*p1的值為地址1002中所存儲的內(nèi)容,即整數(shù)123。同樣,p2的值是1000,也是一個(gè)地址,p2所指向的內(nèi)容,即*p2的值為字符a。有了以上指針的基本概念后,再復(fù)雜的指針,也可以一步推導(dǎo)出具體的含義。比如如下的指針的指針的定義:int **p;還是假定編譯器為p分配的地址是圖1中的2018。則p的值是2010,是一個(gè)地址。P所指向的內(nèi)容,也就是*p的值是地址2010中的內(nèi)容1002,還是一個(gè)地址。P所指向的內(nèi)容的內(nèi)容,即**p就是存貯在1002中的整數(shù)123。C語言中,操作符“&”可以得到一個(gè)變量的地址,比如:int n,*p;就可以通過p=&n得到變量n的地址,并賦值給指針p。
三、指針的應(yīng)用
在C語言中,指針的應(yīng)用比較多,有些情況是用指針會比較方便,有些情況是必須用指針。下面給出幾個(gè)有關(guān)指針使用的例子。
1.交換兩個(gè)變量的數(shù)據(jù),編寫一個(gè)函數(shù),實(shí)現(xiàn)兩個(gè)變量數(shù)據(jù)的交換,初學(xué)者很可能給出這樣的定義:
void swap(int a,int b)
{
int t=a;
a=b;
b=t;
}
當(dāng)為了交換兩個(gè)變量的數(shù)值時(shí),則這樣調(diào)用:
main()
{
int x=10,y=20;
printf(“%d %d/n”,x,y);
swap(x,y);
printf(“%d %d/n”,x,y);
}
但是,當(dāng)你運(yùn)行該程序時(shí),卻驚奇的發(fā)現(xiàn)結(jié)果并不正確。這是為什么呢?這與C語言中參數(shù)的傳遞機(jī)制有關(guān)。在調(diào)用swap函數(shù)時(shí),x、y的值傳遞給了參數(shù)a、b,在函數(shù)內(nèi)部交換的實(shí)際上是a、b的值,而不是x、y的值。那么如何解決這個(gè)問題呢?在C語言中就需要用到指針了。正確的swap函數(shù)的定義及調(diào)用如下:
void swap(int *a,int *b)
{
int t=*a;endprint
*a=*b;
*b=t;
}
main()
{
int x=10,y=20;
printf(“%d %d/n”,x,y);
swap(&x,&y);
printf(“%d %d/n”,x,y);
}
這樣為什么就是正確的呢?因?yàn)橥ㄟ^取地址操作&分別得到了x、y的地址,在函數(shù)調(diào)用時(shí),作為參數(shù)x、y的地址傳遞給了a、b,在swap內(nèi)部,交換的是a、b所指向的內(nèi)容,而a、b所指向的內(nèi)容,實(shí)際上就是x、y的值,從而達(dá)到了交換x、y值的目的。假設(shè)x、y的地址分別是1000和1002,而在調(diào)用swap時(shí),分配給a、b的地址分別是2000和2004。由于x、y均為整數(shù),這里假定整數(shù)占用兩個(gè)字節(jié);而a、b均為指針,假定占用4個(gè)字節(jié),如圖2所示。通過取地址操作分別得到x、y的地址1000和1002,并作為參數(shù)傳遞給了a和b,在swap內(nèi)部交換a、b所指向的內(nèi)容,實(shí)際上交換的就是內(nèi)存地址1000和1002的內(nèi)容,也就是x和y的內(nèi)容。所以,通過指針操作,達(dá)到了交換x、y的值的目的。
2.鏈表。鏈表的功能與數(shù)組有些類似,但是鏈表的長度不固定,可以根據(jù)需要?jiǎng)討B(tài)的調(diào)整,可長可短。而且鏈表最大的好處是插入、刪除比較方便。比如說,用鏈表記錄某一門課的成績,選修的學(xué)生人數(shù)少的可能有十幾人,多的可能有幾百人。如果用數(shù)組,則可能需要定義一個(gè)最大值,無論學(xué)生多少,都需要定義這么大的數(shù)組。而如果用鏈表的話,則可以根據(jù)學(xué)生的多少,動態(tài)的變化。再比如,如果某個(gè)學(xué)生中途退選了這門課程,需要?jiǎng)h除該學(xué)生的有關(guān)信息,如果是數(shù)組的話,特別是當(dāng)需要?jiǎng)h除的學(xué)生排在第一位時(shí),則需要在數(shù)組中移動所有學(xué)生的信息。而鏈表,則可以比較容易地刪除一個(gè)學(xué)生的信息。插入一個(gè)學(xué)生信息也是如此。特別當(dāng)這種插入、刪除操作頻繁發(fā)生時(shí),使用鏈表的效率就會比較高。所謂的鏈表,就是一些通過指針鏈接在一起的數(shù)據(jù)單元。一個(gè)數(shù)據(jù)單元由兩部分組成,一部分為數(shù)據(jù)域,用于存放與該數(shù)據(jù)單元有關(guān)的數(shù)據(jù),一部分為指針域,用于存放鏈表的下一個(gè)單元的地址。鏈表的示意圖如圖3所示。
其中Di表示數(shù)據(jù),數(shù)據(jù)不一定是一個(gè),可能是一組相關(guān)聯(lián)的數(shù)據(jù)。鏈表最后一個(gè)單元的指針是空指針NULL,表示鏈表結(jié)束,這里用“^”表示。在C語言中,鏈表的單元可以用結(jié)構(gòu)定義。比如,我們要實(shí)現(xiàn)一個(gè)記錄某個(gè)課程成績的鏈表,一個(gè)單元記錄一個(gè)學(xué)生的信息,包括學(xué)號、姓名、成績等。則該單元可以定義如下:
struct NODE
{
?搖int number;
?搖double grade;
?搖struct NODE *next;
};
這里用nunber表示學(xué)號,grade表示成績,next是指向下一個(gè)單元的指針。那么如何建立一個(gè)鏈表呢?可以通過每次向一個(gè)鏈表插入一個(gè)單元的辦法建立一個(gè)鏈表。要插入一個(gè)單元,首先要為一個(gè)單元分配一個(gè)空間,這可以通過C語言的函數(shù)malloc來實(shí)現(xiàn),其輸入?yún)?shù)是單元的大小,其返回值是指向該單元的指針。比如本例中,以下調(diào)用就為一個(gè)單元分配了空間,并在p中得到了指向該單元的指針:
strunct NODE *p;p=malloc(sizeof(struct NODE));假設(shè)list是指向?qū)W生成績鏈表的指針,如果向該鏈表插入一個(gè)單元,其實(shí)很簡單,只要令該單元的next等于list,然后再將list指向該單元就可以了。下面給出向?qū)W生成績鏈表中插入一個(gè)單元的函數(shù),其中輸入?yún)?shù)分別是指向成績鏈表的指針、學(xué)號、姓名和成績,返回值是指向插入了一個(gè)單元后的成績鏈表的指針。這里假定開始時(shí),成績鏈表為空,即list的值為NULL。
struct NODE *insert(struct NODE *list,int number,double grade)
{
?搖struct NODE *p;
?搖p = malloc(sizeof(struct NODE));
?搖p->number = number;
?搖p->grade = grade;
?搖p->next = list;
?搖return p;
}
比如從鍵盤輸入學(xué)生學(xué)號和成績建立成績鏈表,當(dāng)學(xué)號為0時(shí)表示輸入結(jié)束,則程序如下:
struct NODE *list = NULL; //初始的成績鏈表為一個(gè)空表
mail()
{
?搖int number = 1;
?搖double grade;
?搖while (1)
?搖{
?搖?搖printf(“請輸入學(xué)號、成績:”);
?搖?搖scanf(“%d %f”, &number, &grade);
?搖?搖if (number == 0) break;
?搖?搖list = insert(list, number, grade);?搖}
}
為了輸出成績單,可以用以下的函數(shù)實(shí)現(xiàn),其原理就是先輸出成績鏈表的第一個(gè)同學(xué)的成績,然后再通過指針找到下一個(gè)同學(xué),以此類推,直到下一個(gè)同學(xué)為NULL為止。該函數(shù)的輸入?yún)?shù)為指向成績鏈表的指針。
Printlist(strunct NODE *list)
{
while (list)
?搖{
?搖?搖printf(“學(xué)號:%d 成績:%f\n”,list->number, list->grade);endprint
?搖?搖list = list->next;?搖}
}
3.樹結(jié)構(gòu)。樹結(jié)構(gòu)簡稱為樹,比如當(dāng)表示一個(gè)家族關(guān)系時(shí),就需要用到樹結(jié)構(gòu)。樹結(jié)構(gòu)也可以用指針實(shí)現(xiàn)。比如某家族情況如下:
A為祖父,B是他的妻子,C、D、E是他們的孩子,其中C、D為男孩,E為女孩,F(xiàn)是C的妻子,G、H是C的孩子。如何表示這樣的一種結(jié)構(gòu)呢?我們可以設(shè)計(jì)這樣的一種結(jié)構(gòu):
struct TREE
{
char xingming[10];
strunct TREE *peiou;//指向配偶
strunct TREE *xiongmei;//指向自己的一個(gè)兄弟姐妹
strunct TREE *haizi;//指向自己的孩子鏈表
strunct TREE *fuqin;//指向自己的父親
}
這里,配偶、父親都是唯一的,用指針指向他們就可以了。由于一個(gè)人的兄弟姐妹人數(shù)是不確定的,有的人多有的人少,所以兄弟姐妹之間用上節(jié)介紹的鏈表表示,也就是說,同屬于一個(gè)父親的兄弟姐妹之間,形成一個(gè)鏈表。父親的haizi(孩子)指針,指向該鏈表的第一個(gè)單元,通過該指針,就可以得到一個(gè)人的所有的孩子。示意圖如下:
而這里的父親、妻子、孩子等,也都與張三具有同樣的結(jié)構(gòu),比如“妻子”,也有指向她父親的指針,她的配偶指針則指向張三,而她的孩子指針,也同張三一樣,指向孩子鏈表。有了這樣的結(jié)構(gòu)和鏈接關(guān)系,就可以很方便地從家族樹中提取出想要的關(guān)系。假設(shè)p是指向張三這個(gè)結(jié)構(gòu)的指針,則有:輸出張三的父親:printf(“%s”,p->fuqin->xingming);輸出張三的母親,由于這里并沒有直接的“母親”信息,可以通過父親的配偶關(guān)系得到:Printf(“%s”,p->fuqin->peiou->xingming;當(dāng)然,也可以在結(jié)構(gòu)中增加一個(gè)muqin指針,直接指向自己的母親,這完全根據(jù)實(shí)際需要設(shè)計(jì)。比如,如果頻繁的查找某些人母親信息,則可以考慮添加一個(gè)muqin指針,以提高效率。輸出張三的所有孩子:q=p->haizi;
while (q)
{
?搖printf(“%s “,q->xingming);
?搖q=q->xiongmei;}
在C語言中,指針是比較重要的概念,也是學(xué)生在學(xué)習(xí)過程中難于理解且遇到的比較多的問題。通過在C語言教學(xué)過程中的實(shí)踐,整理了一些針對指針教學(xué)的問題,通過這些問題的講解和分析,學(xué)生往往會加深對指針的理解,希望對有關(guān)C語言的教與學(xué)能起到一定的幫助。
參考文獻(xiàn):
[1]薛勝軍.計(jì)算機(jī)組成原理[M].武漢:華中科技大學(xué)出版社,2000.
[2]王誠,劉衛(wèi)東,宋佳興.計(jì)算機(jī)組成與設(shè)計(jì)[M].3版.北京:清華大學(xué)出版社,2008.
[3]嚴(yán)蔚敏,吳偉民.數(shù)據(jù)結(jié)構(gòu)(C語言版)[M].北京:清華大學(xué)出版社,2006.
[4]譚浩強(qiáng).C程序設(shè)計(jì)M].北京:清華大學(xué)出版社,2006.
[5]David J.Kruglinski.Visual.C++技術(shù)內(nèi)幕[M].4版.北京:清華大學(xué)出版社,2001.
[6]H.M.Deitel,P.J.Deitel.C程序設(shè)計(jì)教程[M].北京:機(jī)械工業(yè)出版社,2001.
[7]黃宇.C語言教學(xué)中幾個(gè)常見的問題[J].計(jì)算機(jī)教育,2009,(10).endprint
?搖?搖list = list->next;?搖}
}
3.樹結(jié)構(gòu)。樹結(jié)構(gòu)簡稱為樹,比如當(dāng)表示一個(gè)家族關(guān)系時(shí),就需要用到樹結(jié)構(gòu)。樹結(jié)構(gòu)也可以用指針實(shí)現(xiàn)。比如某家族情況如下:
A為祖父,B是他的妻子,C、D、E是他們的孩子,其中C、D為男孩,E為女孩,F(xiàn)是C的妻子,G、H是C的孩子。如何表示這樣的一種結(jié)構(gòu)呢?我們可以設(shè)計(jì)這樣的一種結(jié)構(gòu):
struct TREE
{
char xingming[10];
strunct TREE *peiou;//指向配偶
strunct TREE *xiongmei;//指向自己的一個(gè)兄弟姐妹
strunct TREE *haizi;//指向自己的孩子鏈表
strunct TREE *fuqin;//指向自己的父親
}
這里,配偶、父親都是唯一的,用指針指向他們就可以了。由于一個(gè)人的兄弟姐妹人數(shù)是不確定的,有的人多有的人少,所以兄弟姐妹之間用上節(jié)介紹的鏈表表示,也就是說,同屬于一個(gè)父親的兄弟姐妹之間,形成一個(gè)鏈表。父親的haizi(孩子)指針,指向該鏈表的第一個(gè)單元,通過該指針,就可以得到一個(gè)人的所有的孩子。示意圖如下:
而這里的父親、妻子、孩子等,也都與張三具有同樣的結(jié)構(gòu),比如“妻子”,也有指向她父親的指針,她的配偶指針則指向張三,而她的孩子指針,也同張三一樣,指向孩子鏈表。有了這樣的結(jié)構(gòu)和鏈接關(guān)系,就可以很方便地從家族樹中提取出想要的關(guān)系。假設(shè)p是指向張三這個(gè)結(jié)構(gòu)的指針,則有:輸出張三的父親:printf(“%s”,p->fuqin->xingming);輸出張三的母親,由于這里并沒有直接的“母親”信息,可以通過父親的配偶關(guān)系得到:Printf(“%s”,p->fuqin->peiou->xingming;當(dāng)然,也可以在結(jié)構(gòu)中增加一個(gè)muqin指針,直接指向自己的母親,這完全根據(jù)實(shí)際需要設(shè)計(jì)。比如,如果頻繁的查找某些人母親信息,則可以考慮添加一個(gè)muqin指針,以提高效率。輸出張三的所有孩子:q=p->haizi;
while (q)
{
?搖printf(“%s “,q->xingming);
?搖q=q->xiongmei;}
在C語言中,指針是比較重要的概念,也是學(xué)生在學(xué)習(xí)過程中難于理解且遇到的比較多的問題。通過在C語言教學(xué)過程中的實(shí)踐,整理了一些針對指針教學(xué)的問題,通過這些問題的講解和分析,學(xué)生往往會加深對指針的理解,希望對有關(guān)C語言的教與學(xué)能起到一定的幫助。
參考文獻(xiàn):
[1]薛勝軍.計(jì)算機(jī)組成原理[M].武漢:華中科技大學(xué)出版社,2000.
[2]王誠,劉衛(wèi)東,宋佳興.計(jì)算機(jī)組成與設(shè)計(jì)[M].3版.北京:清華大學(xué)出版社,2008.
[3]嚴(yán)蔚敏,吳偉民.數(shù)據(jù)結(jié)構(gòu)(C語言版)[M].北京:清華大學(xué)出版社,2006.
[4]譚浩強(qiáng).C程序設(shè)計(jì)M].北京:清華大學(xué)出版社,2006.
[5]David J.Kruglinski.Visual.C++技術(shù)內(nèi)幕[M].4版.北京:清華大學(xué)出版社,2001.
[6]H.M.Deitel,P.J.Deitel.C程序設(shè)計(jì)教程[M].北京:機(jī)械工業(yè)出版社,2001.
[7]黃宇.C語言教學(xué)中幾個(gè)常見的問題[J].計(jì)算機(jī)教育,2009,(10).endprint
?搖?搖list = list->next;?搖}
}
3.樹結(jié)構(gòu)。樹結(jié)構(gòu)簡稱為樹,比如當(dāng)表示一個(gè)家族關(guān)系時(shí),就需要用到樹結(jié)構(gòu)。樹結(jié)構(gòu)也可以用指針實(shí)現(xiàn)。比如某家族情況如下:
A為祖父,B是他的妻子,C、D、E是他們的孩子,其中C、D為男孩,E為女孩,F(xiàn)是C的妻子,G、H是C的孩子。如何表示這樣的一種結(jié)構(gòu)呢?我們可以設(shè)計(jì)這樣的一種結(jié)構(gòu):
struct TREE
{
char xingming[10];
strunct TREE *peiou;//指向配偶
strunct TREE *xiongmei;//指向自己的一個(gè)兄弟姐妹
strunct TREE *haizi;//指向自己的孩子鏈表
strunct TREE *fuqin;//指向自己的父親
}
這里,配偶、父親都是唯一的,用指針指向他們就可以了。由于一個(gè)人的兄弟姐妹人數(shù)是不確定的,有的人多有的人少,所以兄弟姐妹之間用上節(jié)介紹的鏈表表示,也就是說,同屬于一個(gè)父親的兄弟姐妹之間,形成一個(gè)鏈表。父親的haizi(孩子)指針,指向該鏈表的第一個(gè)單元,通過該指針,就可以得到一個(gè)人的所有的孩子。示意圖如下:
而這里的父親、妻子、孩子等,也都與張三具有同樣的結(jié)構(gòu),比如“妻子”,也有指向她父親的指針,她的配偶指針則指向張三,而她的孩子指針,也同張三一樣,指向孩子鏈表。有了這樣的結(jié)構(gòu)和鏈接關(guān)系,就可以很方便地從家族樹中提取出想要的關(guān)系。假設(shè)p是指向張三這個(gè)結(jié)構(gòu)的指針,則有:輸出張三的父親:printf(“%s”,p->fuqin->xingming);輸出張三的母親,由于這里并沒有直接的“母親”信息,可以通過父親的配偶關(guān)系得到:Printf(“%s”,p->fuqin->peiou->xingming;當(dāng)然,也可以在結(jié)構(gòu)中增加一個(gè)muqin指針,直接指向自己的母親,這完全根據(jù)實(shí)際需要設(shè)計(jì)。比如,如果頻繁的查找某些人母親信息,則可以考慮添加一個(gè)muqin指針,以提高效率。輸出張三的所有孩子:q=p->haizi;
while (q)
{
?搖printf(“%s “,q->xingming);
?搖q=q->xiongmei;}
在C語言中,指針是比較重要的概念,也是學(xué)生在學(xué)習(xí)過程中難于理解且遇到的比較多的問題。通過在C語言教學(xué)過程中的實(shí)踐,整理了一些針對指針教學(xué)的問題,通過這些問題的講解和分析,學(xué)生往往會加深對指針的理解,希望對有關(guān)C語言的教與學(xué)能起到一定的幫助。
參考文獻(xiàn):
[1]薛勝軍.計(jì)算機(jī)組成原理[M].武漢:華中科技大學(xué)出版社,2000.
[2]王誠,劉衛(wèi)東,宋佳興.計(jì)算機(jī)組成與設(shè)計(jì)[M].3版.北京:清華大學(xué)出版社,2008.
[3]嚴(yán)蔚敏,吳偉民.數(shù)據(jù)結(jié)構(gòu)(C語言版)[M].北京:清華大學(xué)出版社,2006.
[4]譚浩強(qiáng).C程序設(shè)計(jì)M].北京:清華大學(xué)出版社,2006.
[5]David J.Kruglinski.Visual.C++技術(shù)內(nèi)幕[M].4版.北京:清華大學(xué)出版社,2001.
[6]H.M.Deitel,P.J.Deitel.C程序設(shè)計(jì)教程[M].北京:機(jī)械工業(yè)出版社,2001.
[7]黃宇.C語言教學(xué)中幾個(gè)常見的問題[J].計(jì)算機(jī)教育,2009,(10).endprint