c語言指針范文
時間:2023-04-03 09:59:48
導(dǎo)語:如何才能寫好一篇c語言指針,這就需要搜集整理更多的資料和文獻(xiàn),歡迎閱讀由公務(wù)員之家整理的十篇范文,供你借鑒。
篇1
關(guān)鍵詞: C語言 指針 函數(shù) 數(shù)組
“指針”是C語言中廣泛使用的一種數(shù)據(jù)類型,運用指針編程是C語言最主要的風(fēng)格之一。利用指針可以表示各種數(shù)據(jù)結(jié)構(gòu),它與函數(shù)、數(shù)組的使用和傳遞數(shù)據(jù)有密切聯(lián)系,能方便地訪問數(shù)組,還能像匯編語言一樣處理內(nèi)存地址,從而編出精致而高效的程序。指針極大地強(qiáng)化了C語言的功能。學(xué)習(xí)指針是學(xué)習(xí)C語言最重要的一環(huán),能否正確理解和使用指針是判斷是否掌握了C語言的重要標(biāo)志。但是指針也是C語言最危險的特性,如果使用不當(dāng),則很容易指到意想不到的地方,產(chǎn)生錯誤也很難發(fā)現(xiàn)。因此,對于初學(xué)者來說,應(yīng)特別注意指針的應(yīng)用。怎樣才能應(yīng)用好指針呢?下面筆者以在計算機(jī)C語言教學(xué)中的體會與大家進(jìn)行探討。
一、理解指針
在C語言中任何數(shù)據(jù)只要定義了,在內(nèi)存中就是有一定的存儲單元的。存儲單元就是變量在計算機(jī)中的存儲地址,指針就是用來表示這些地址的變量。所以簡單地說,指針就是地址,變量的指針就是變量的地址,這里還涉及一個概念就是指針變量,所謂指針變量就是用來存放指針(地址)的變量。例如:int a;假設(shè)a的地址是2000,而2000又存儲在變量point中,那么變量point就是指針的變量簡稱指針變量,a就是指針變量所指向的變量。很多初學(xué)者都存在這樣的誤區(qū):既然指針放的是地址,而2000正好是變量a的地址,那么對于指針point就可以這樣賦值:point=2000,這是錯誤的,這里的2000表示的不是地址是一個整型數(shù)據(jù)。所以對于指針變量的賦值只能用取地址運算符“&”進(jìn)行賦值即:point=&a;&a即為a的地址。
二、指針與函數(shù)
指針作為C語言的精華有很多用途,除具有一般的功能外,其中具體特殊功能的應(yīng)用總結(jié)起來有三個方面:一是用于在函數(shù)中可以返回多個值;二是可以實現(xiàn)動態(tài)調(diào)用函數(shù);三是實現(xiàn)數(shù)組的動態(tài)定義。其中,普通變量作為函數(shù)的參數(shù),傳遞的是變量的值,因此只能帶回一個返回值,但在有些場合需要返回多個值,這就必須用到指針做函數(shù)的參數(shù),因為指針作為參數(shù)傳遞的是地址,讓實參和形參指向同一個變量的地址,N個形參所指向的變量的值改變了,N個實參的值也自然改變了,從而實現(xiàn)了帶回多個返回值。這里舉個例子,編寫一個函數(shù)實現(xiàn)兩個數(shù)從小到大輸出。這個程序需要子函數(shù)實現(xiàn)兩個數(shù)的交換,把交換后的兩個值通過指針傳回主函數(shù)輸出,傳回來的是兩個值。所以普通變量做函數(shù)的參數(shù)是無法實現(xiàn)的,只能用指針作為函數(shù)的參數(shù)。具體實現(xiàn):
子函數(shù)實現(xiàn)交換:
swap(p1,p2)
int *p1,*p2;
{int p;
p=*p1;
*p1=*p2;
*p2=p;
}
主程序?qū)崿F(xiàn)調(diào)用,輸出:
main()
{int a,b;
int *pointer_1,*pointer_2;
scanf(“%d,%d”,&a,&b);
point_ 1=&a;
point_2=&b;
if(a
swap(point_1,point_2);
printf(“%d,%d”,a,b);
}
由此可見,要通過函數(shù)調(diào)用得到N個返回值可以通過以下三步實現(xiàn):(1)主調(diào)函數(shù)中設(shè)N個變量,用N個指針指向他們;(2)將指針變量作實參,將N個變量的地址傳給形參;(3)通過形參指針變量指向的改變,改變N個變量的值。最后主調(diào)函數(shù)中就可以得到N個變量的返回值。
三、指針與數(shù)組
前面提到任何數(shù)據(jù)都有存儲單元,都有指針。所以,從這個角度出發(fā)可以將指針分為:指向變量的指針、數(shù)組指針、字符指針、指向指針的指針、函數(shù)指針、結(jié)構(gòu)變量的指針及文件指針,等等。其中,指向變量的指針就是存儲變量的地址的,這是指針最簡單的一種類型。那么一個變量有地址,一個數(shù)組有若干個元素,每個元素都有一個地址,所謂數(shù)組的指針,就是指數(shù)組的名稱,實際上是指向整個數(shù)組空間的起始地址。數(shù)組元素的指針是數(shù)組元素的地址。例如:int a[10];int*p;這里的數(shù)組名a就是數(shù)組的首地址,本質(zhì)上是一個指針。a[2]表示距離a指向空間向后2個位置所在空間中的存放的值,所以a[2]=*(a+2)。那么如果讓p=a,p就是指向數(shù)組的指針,對于a我們可以做加減整數(shù)運算,利用它表示數(shù)組中任何數(shù)據(jù)的值。那么對于指針也可以通過加減整數(shù)運算來表示數(shù)組中的任何數(shù)據(jù)。指針變量加上或減區(qū)一個整數(shù)n表示把指針指向的當(dāng)前位置向前或向后移動n個位置。具體移動的字節(jié)數(shù)和指針數(shù)組的類型在內(nèi)存所占的字節(jié)數(shù)有關(guān)系,如果指針數(shù)組類型為整型,在內(nèi)存中占2個字節(jié),那么,指針p+1,實際上的地址值就是原址加2,對于數(shù)組元素來說就是指針向后移動一個元素。如int a[10],*p,*s;p=a;s=p+2;其中s的值表示數(shù)組中首地址向后移動2個數(shù)組元素的位置,表示a[2]對應(yīng)的地址,而具體移動的字節(jié)數(shù)則為4個字節(jié)。為了表示兩個地址間存在的距離,可以通過指針間的減法實現(xiàn)。指針之間是不能有加法操作的,指針的加減運算只能對數(shù)組指針變量進(jìn)行,對指向其他類型的變量的指針變量做加減運算是毫無意義的。而且兩個指針變量之間的運算只有指向同一數(shù)組時它們之間才能進(jìn)行運算,否則運算將失去意義。
四、結(jié)語
C語言是到目前為止學(xué)習(xí)最多的程序設(shè)計語言之一,也是國外大學(xué)計算機(jī)專業(yè)唯一的必修課程。在整個C語言教學(xué)中,指針是一個十分重要的部分,也是最難掌握的部分之一。本文從對指針概念的理解、指針在函數(shù)和數(shù)組的使用等方面系統(tǒng)論述了指針,目的是讓大家清晰地了解指針、掌握指針,從而高效地應(yīng)用指針。只有掌握好指針,才能充分發(fā)揮C語言的優(yōu)勢。
參考文獻(xiàn):
[1]譚浩強(qiáng).C程序設(shè)計教程.北京:清華大學(xué)出版社,2008,11.
[2]陳剛.C語言程序設(shè)計.清華大學(xué)出版社,2010,2.
篇2
【關(guān)鍵詞】C語言 指針 反匯編 間接尋址 寄存器 棧
1 引言
C語言誕生于20世紀(jì)70年代的美國貝爾實驗室,它是面向過程的,可移植的,功能強(qiáng)大的高級程序設(shè)計語言。盡管現(xiàn)如今有許多功能更強(qiáng)大的面向?qū)ο蟮母呒壋绦蛟O(shè)計語言(如C++,Java,C#等),C語言仍然具有旺盛的生命力,其仍是計算機(jī)領(lǐng)域的通用程序設(shè)計語言,特別是在底層的硬件驅(qū)動領(lǐng)域。這一切都要歸功于指針,指針是C語言最重要的特性之一,利用它可以直接操作硬件,這是它的優(yōu)點,也是它的缺點,因為直接操作硬件稍有不慎,就會導(dǎo)致非常嚴(yán)重的后果。
2 C語言指針簡介
現(xiàn)代計算機(jī)中大部分都是按字節(jié)劃分內(nèi)存的,每個字節(jié)都有唯一的地址,C語言中的所有指針操作都是基于這些地址的。在C程序中一個變量會占用一個或多個字節(jié),第一個字節(jié)的地址就是該變量的地址,將該地址賦值給某個變量后,就稱其為指針。指針在C程序開發(fā)過程中發(fā)揮著舉足輕重的作用,其基本應(yīng)用有如下三點:
2.1 指向基本數(shù)據(jù)類型
假設(shè)我們定義int i = 10,則我們就占用了4個字節(jié)的內(nèi)存(假設(shè)是在32位架構(gòu)下),這4個字節(jié)就和變量名i建立了某種特殊聯(lián)系,就可以通過該變量i對這4個字節(jié)進(jìn)行讀寫操作。或者可以通過指針方式操控這4個字節(jié)。定義int*p = &i,就將該變量的首地址賦值給了指針變量p。然后就可以通過*p,對這4個字節(jié)進(jìn)行讀寫操作。此時*p和i是完全等價的,即*p是變量i的別名。這是指針最基礎(chǔ)的應(yīng)用。
2.2 當(dāng)指針作為函數(shù)參數(shù)時,它就可以發(fā)揮出強(qiáng)大的作用,特別是在數(shù)組,字符串,文件等的處理中
主要作用有如下兩點:
2.2.1 讓函數(shù)返回多個值。假設(shè)有如下函數(shù)聲明
int foo(double * a,double * b);
則我們可以在函數(shù)內(nèi)部修改a和b,在函數(shù)返回時,除了返回一個整型值外,還可以返回這兩個被修改過的浮點數(shù)。假如不希望修改這兩個浮點數(shù),可以加上const修飾,如下所示:
int foo(const double *a,const double *b);
則在函數(shù)內(nèi)部就不可以對變量a和b進(jìn)行修改。這種技術(shù)在字符串處理函數(shù)中應(yīng)用的特別多,是因為不希望源字符串被誤改。例如:
char * strcpy(char *dest,const char *src);
2.2.2 節(jié)約內(nèi)存空間,提高運行速度
在函數(shù)間傳遞數(shù)組,結(jié)構(gòu)體或文件時,如果像傳遞普通變量那樣,將參數(shù)復(fù)制一個副本到函數(shù)棧幀,就會給程序帶來很大的開銷,浪費空間和時間,因為這幾個變量不再像普通變量那樣只占幾個字節(jié),特別是文件通常都是很大的,從幾K到幾百M。這時最好的解決方法就是把該結(jié)構(gòu)體變量或文件的地址傳遞出去,即多個函數(shù)操作的是同一個內(nèi)存塊。
2.3 指針還可應(yīng)用于動態(tài)內(nèi)存分配,從而修補(bǔ)數(shù)組在程序運行期間無法動態(tài)改變大小這一缺陷。動態(tài)內(nèi)存分配主要用于構(gòu)建鏈表,數(shù),圖等數(shù)據(jù)結(jié)構(gòu)
但指針的操作需要很仔細(xì),稍有疏忽就會導(dǎo)致程序崩潰。例如當(dāng)我們申明了一個指針,而沒有及時初始化,此時它就是一個野指針,對野指針指向的位置進(jìn)行讀寫就會導(dǎo)致程序出錯,因為有可能程序關(guān)鍵部分被無意修改了。再比如在某個函數(shù)內(nèi)部動態(tài)申請一塊內(nèi)存,但在函數(shù)退出之前卻忘記了及時的回收它,就會導(dǎo)致指向那塊內(nèi)存的指針丟失,即程序失去了對那塊內(nèi)存的控制,但那塊內(nèi)存仍然被占用著,如果繼續(xù)重復(fù)執(zhí)行該函數(shù),就會導(dǎo)致內(nèi)存大量被占用,而無法釋放,直到系統(tǒng)崩潰。還有就是我們動態(tài)申請內(nèi)存時,沒有判斷申請是否成功(即判斷是否為NULL),而剛好此時系統(tǒng)無法提供我們所需的內(nèi)存塊,就直接操作指針,也會導(dǎo)致程序出錯。正是基于這方面的考量,后來許多基于C語言發(fā)展起來的語言(如Java,C#),都舍棄了指針操作。
3 寄存器間接尋址模式簡介
C語言函數(shù)的執(zhí)行都是依賴于棧的,每個函數(shù)在執(zhí)行之前都需要在棧上開辟一塊屬于自己的空間,這個空間就是棧幀。這個棧幀的建立和釋放是依靠編譯器在函數(shù)頭部和尾部添加的一段匯編代碼完成的。這就是任何高級語言編寫的程序在鏈接成為可執(zhí)行程序之前都必須被編譯為匯編語言程序的原因之一。當(dāng)棧幀建立完成后,寄存器ESP指向棧幀的頭部,EBP指向棧幀的尾部,即此時ESP和EBP分別保存棧幀的頭部和尾部的內(nèi)存地址。隨著數(shù)據(jù)的壓棧和出棧,會導(dǎo)致棧頂會不斷變化,即ESP保存的內(nèi)存地址會不斷變化,而棧底在整個函數(shù)執(zhí)行期都保持不變,所以EBP可以作為訪問當(dāng)前棧底前后內(nèi)存塊的基準(zhǔn)。例如:movl 0xa,-0x14(%ebp)就表示從EBP指向的內(nèi)存位置向下偏移20個字節(jié)處開始保存0xa,這就是寄存器間接尋址。
4 分析反匯編代碼
測試代碼如下:
int main(void)
{
int i = 10;
int *p = &i;
*p = 123;
printf("%d\n",*p);
return 0;
}
本次測試的環(huán)境是32位架構(gòu)Ubuntu 4.2.0-42-generic,gcc版本是: 5.2.1 20151010。不同的版本在生成的匯編代碼上可能略有差別,但基本原理是不變的。
對上述代碼進(jìn)行反匯編,在段截取一段與本文相關(guān)的代碼。這是在Linux下的反匯編結(jié)果,所以是AT&T匯編格式。
......
1. movl $0xa,-0x14(%ebp)
2. lea -0x14(%ebp),%eax
3. mov %eax,-0x10(%ebp)
4. mov -0x10(%ebp),%eax
5. movl $0x7b,(%eax)
6. mov -0x10(%ebp),%eax
7. mov (%eax),%eax
8. sub $0x8,%esp
9. push %eax
10. push $0x8048560
11. call 8048330
......
Main函數(shù)執(zhí)行時,其棧幀會不斷變化,其變化過程如圖1和圖2所示。為了敘述的方便,假設(shè)棧幀-0x14(%ebp)處的內(nèi)存地址為0x12345678,即灰色部分。這11行匯編代碼具體功能詳述如下:
(1)在棧低下方偏移0x14處保存數(shù)字10。
(2)將內(nèi)存地址0x12345678,存入到CPU的寄存器EAX中。
(3)將地址0x12345678存入到-0x10(%ebp)中。
(4)再將地址0x12345678存儲到EAX中。
(5)在地址0x12345678地址處保存0x7b。
(6)將地址0x12345678保存到EAX中。
(7)從地址0x12345678處加載4字節(jié)的數(shù)據(jù)到EAX中。
(8)更新ESP,因為-0x10(%ebp)和-0x14(%ebp)處這8個字節(jié)被占用了。
(9)將EAX壓棧,為調(diào)用printf做準(zhǔn)備。
(10)將字符串“%d\n”的地址壓棧。
(11)調(diào)用printf函數(shù)。
簡單來說,就是把某個需要操作的對象的內(nèi)存地址保存到了棧幀中,當(dāng)需要讀寫該對象時,就把該地址加載到寄存器中,然后通過寄存器間接尋址實現(xiàn)讀寫。另外,匯編語言中并沒有局部變量這一概念,C語言程序中的局部變量也是通過寄存器間接尋址實現(xiàn)讀寫的。例如上述匯編代碼的第一句就是通過寄存器間接尋址找到0x12345678這個內(nèi)存位置,然后寫入數(shù)字10的。
而在嵌入式系統(tǒng)中,需要讀寫大量的寄存器,此時最好的方法就是通過指針操控它們。要操控這些寄存器的唯一的方法就是通過地址訪問它們,即通過指針讀寫寄存器。跟一般桌面應(yīng)用開發(fā)相比,唯一不同的就是需要先把由CPU廠商提供的寄存器編號強(qiáng)制轉(zhuǎn)換為地址(桌面應(yīng)用開發(fā)中,由于系統(tǒng)保護(hù),不允許直接把一個整數(shù)強(qiáng)轉(zhuǎn)為地址)。該強(qiáng)轉(zhuǎn)一般是通過宏定義來實現(xiàn)的,如下所示:
#define GPJ0CON = (*(volatile unsigned int *)0xXXXXXXXX)
然后在程序中就可以像對待普通變量一樣對它進(jìn)行寫入和讀取工作。而在匯編層,依然是寄存器間接尋址,在此不再贅述。因為涉及到大量的寄存器的讀寫,所以通常的做法就是把大量的與寄存器讀寫有關(guān)的宏定義放在一個單獨的文件,便于查找和修改。
5 總結(jié)
指針運算就是對寄存器間接尋址的封裝,目的是隱藏匯編層的寄存器,棧幀,棧頂和棧底等復(fù)雜概念,從而為開發(fā)人員提供一個更加友好,邏輯上更接近人類思維的操作。而寄存器間接尋址依賴的是內(nèi)存地址,即指針運算依賴的就是內(nèi)存地址。所以說指針的本質(zhì)就是內(nèi)存地址。則對指針執(zhí)行乘法或除法運算在邏輯上是無法說通的,當(dāng)然編譯器也會報錯。因此指針的合法算術(shù)運算只能是加減整數(shù)或兩個指針相減,這在數(shù)組運算別有用。通過指針加減整數(shù)就可以讀寫數(shù)組中不同的元素,但一定要注意不能越界。當(dāng)兩個指針指向同一個數(shù)組的不同元素時,可以執(zhí)行指針相減運算,得出它們之間相差幾個元素。理解了指針的本質(zhì)就是內(nèi)存地址之后,對數(shù)組指針,函數(shù)指針,多級指針的理解會有很大的幫助。
參考文獻(xiàn)
[1][美]K.N.King著.呂秀鋒,黃倩,譯.C語言程序設(shè)計現(xiàn)代方法(第2版)[M].北京:人民郵電出版社,2010.
[2][美]Richard Blum著.馬朝輝,等譯.匯編語言程序設(shè)計[M].北京:機(jī)械工業(yè)出版社,2006.
[3]韋東山.嵌入式Linux語言程序開發(fā)完全手冊[M].北京:人民郵電出版社,2008.77-78.
篇3
關(guān)鍵詞:指針變量 數(shù)組 字符串 函數(shù) 常見問題
中圖分類號:TP312 文獻(xiàn)標(biāo)識碼:A 文章編號:1673-9795(2013)08(b)-0163-01
指針是C語言中廣泛使用的一種數(shù)據(jù)類型。運用指針編程是C語言最主要的特點之一。利用指針變量可以表示各種數(shù)據(jù)結(jié)構(gòu),也能很方便地使用數(shù)組和字符串,更加能像匯編語言一樣處理內(nèi)存地址,[1]從而編寫出精練而高效的程序。
1 指針變量的使用優(yōu)勢及常規(guī)用法
(1)使用指針指向數(shù)組首地址,簡化了數(shù)組相關(guān)的程序內(nèi)容的書寫,避免了整體使用數(shù)組,在程序執(zhí)行中減少了先找數(shù)組元素的地址再取數(shù)組元素內(nèi)容的過程,直接在數(shù)組所在的地址范圍內(nèi)操作數(shù)組元素,提高了程序的執(zhí)行效率。(2)使用指針指向字符串(即字符數(shù)組),把一個字符串整體當(dāng)作一個數(shù)組元素,多個字符串的指針變量就構(gòu)成了指針數(shù)組,不僅節(jié)省了內(nèi)存空間,還大大地提高了程序的執(zhí)行效率。(3)指向單變量的指針變量作為函數(shù)參數(shù),可以在程序執(zhí)行過程中及時轉(zhuǎn)向調(diào)用函數(shù)的入口。節(jié)省內(nèi)存空間的同時,把指針變量替代單變量作為直接變量在調(diào)用函數(shù)執(zhí)行過程中執(zhí)行相應(yīng)程序操作,免去了返回值的執(zhí)行時間與過程。(4)指向結(jié)構(gòu)體復(fù)合變量的指針變量作為函數(shù)參數(shù),可以通過變化結(jié)構(gòu)體變量靈活使用指針變量在調(diào)用函數(shù)中執(zhí)行函數(shù)的程序操作,不僅節(jié)省內(nèi)存空間與執(zhí)行時間,而且方便程序變量的修改,提高了程序的可移植性。(5)指向函數(shù)的指針變量作為函數(shù)的參數(shù),可以在一個主函數(shù)中實現(xiàn)多個自定義函數(shù)功能間的調(diào)用,大大地提高了程序的靈活性與可移植性及程序執(zhí)行的效率。(6)使用指針指向文件類型結(jié)構(gòu)體,可以找到與之相關(guān)的文件,實現(xiàn)文件的訪問,在主函數(shù)執(zhí)行過程中靈活轉(zhuǎn)向其它文件的執(zhí)行。
2 指針變量使用常見問題及解決方法的探求
2.1 指針變量的初始化
同其他變量的初始化相似,在指針變量的定義之后就應(yīng)該給指針變量賦一個初始的地址值。如果沒有給定義的指針變量賦初值的話,指針變量的值不定,可能會導(dǎo)致一些隱藏在某些地址號的內(nèi)存中的難以跟蹤的漏洞(bug)運行。如:
int *p; *p=100;
p定義為一個指向整型變量的指針變量,但是卻沒有給p賦予一個初始的地址值,只是把一個存儲100的常量的存儲單元的首地址賦給了p,而這個存儲單元的首地址可能在程序其它位置另作它用,就會產(chǎn)生隱形的難以追蹤的bug的運行。因此,為了避免可能性的發(fā)生,就要和其他變量的使用一樣,在定義指針變量的時候就要同時給予指針變量一個初值,以確定指針變量的初始的地址,即指針變量的初始化。將上述例子修改為:
int a=100; int *p=&a;
還要注意把“int *p=&a;”和“*p=&a;”混淆,前者是指針變量的初始化語句,即定義的同時給指針變量賦初值,而后者是一個旨意錯誤的賦值語句,把整型變量a的首地址賦給了p所指向的整型變量。
2.2 指針變量的賦值
給指針變量賦予的初值一定是地址。同樣,在程序中給指針變量重新賦予的值也只能是地址或使指針變量指向同類型的變量值的首地址。如:
int a,*p; p=a;
要使p指向a,就要有地址運算符&對a取首地址后賦給p,或者把變量取內(nèi)容賦給p,而不是直接把a(bǔ)賦給p。C語言編譯器會提示指出這是個語法錯誤,給指針變量賦予的內(nèi)容和指針變量不匹配。正確的賦值一般形式為:
int a,*p; p=&a;
或 int a,*p; *p=a;
還要說明的是指針的指向要有具體類型說明。不能給指針賦予與其基類型不符的地址,否則也會出現(xiàn)語法上錯誤。如:
int a=100; double *p; p=&a;
在給指針賦值時,不只要求是地址,還要是一個與該指針類型相符的變量或常量的首地址。而上述例子中,a是整型的變量,p是基類型為雙精度型的變量。二者不相匹配,這種賦值在編譯時就會發(fā)生語法錯誤。因此,給指針變量的賦值要注意指針變量的基類型,即指針變量能夠指向的變量類型。
2.3 指針在函數(shù)之間值的傳遞
#include “stdio.h”
void swap(int *a, int *b)
{int t; t=*a; *a=*b; *b=t;}
void main( )
{int x,y; printf(“請輸入兩個整數(shù):”);
scanf(&x,&y); printf(“x=%d, y=%d\n”,x,y);
swap(&x,&y); printf(“x=%d, y=%d\n”,x,y);}
函數(shù)間的值傳遞也可以通過實參的地址單向傳遞給形參的指針變量,直接調(diào)用函數(shù),完成函數(shù)間數(shù)據(jù)傳遞的目的。主函數(shù)main( )在調(diào)用函數(shù)swap( )的同時,把變量x和y的地址分別單向傳遞給了指針變量a和b。也就是主函數(shù)中對整型變量x和y的操作,通過地址的傳遞,雖然在調(diào)用函數(shù)過程中形式上是對指向整型變量x和y的指針變量a和b的內(nèi)容(即x和y)的操作,實質(zhì)上仍然是繼續(xù)對整型變量x和y調(diào)用函數(shù)的操作。也就沒有必要給主函數(shù)返回x和y的值了。省去了返回的時間和操作過程,提高了程序的執(zhí)行效率與正確率。
2.4 指向指針變量的指針變量
*p,**p,***p分別叫做一級指針、二級指針和三級指針。如果這樣定義:
int a, *p, **q, ***r;
則第一個*p中的p可以用來存放普通整型變量的地址,例如賦值:p=&a。第二個**q中的q可以用來存放整型變量地址的地址,例如指針變量p的地址,p是指針變量,變量的值是整型變量a的地址,那么p這個指針變量的地址就需要一個比p高一層的指針來存放。因此可以這樣賦值:q=&p。第三個***r,道理相同,可以這樣賦值 r=&q。指針的嵌套使用,使程序在執(zhí)行時更靈活,更有效率。
3 指針的使用是C語言程序設(shè)計中最重要的一環(huán)
能否正確理解和使用指針是我們是否真正掌握C語言的一個標(biāo)志。C語言中指針的使用比較靈活,很多人在實際編程中很容易出錯,而且這種錯誤恰恰又難以發(fā)現(xiàn),所以建議初學(xué)者大量地上機(jī)調(diào)試程序,以弄清一些細(xì)節(jié),并積累經(jīng)驗,為后續(xù)編程內(nèi)容的學(xué)習(xí)打好堅實的基礎(chǔ)。同時,指針也是C語言中最為困難的一部分,在學(xué)習(xí)中除了要正確理解基本概念,還必須要多編程并上機(jī)調(diào)試。只要做到這些,指針也是不難掌握的。
參考文獻(xiàn)
篇4
關(guān)鍵詞:存儲空間圖;間接尋址;一級指針;二級指針;存儲單元
中圖分類號:TP311文獻(xiàn)標(biāo)識碼:A文章編號:1009-3044(2007)16-31093-03
A Discussion about the Relation of C Language Pointer and Assemble Language Indirect Addressing――Giving Analysis from the Storage Space Digraph
WANG Hai-yan
(Computer Science Department of Suqian College, Suqian 223800, China)
Abstract: C language is a user-oriented procedural language. Pointer is the most flexible part in this language. Assemble language is a language which is processor-oriented and there is no definite conception of pointer, but the similar conception of pointer emergences everywhere. In this paper, it present the application of pointer in assemble language through indirect addressing mode. Depending on the storage space digraph and the relation between pointer of C language and indirect addressing of assemble language, it makes it easier to understand the application and relation between the two languages.
Keywords: Storage Space Digraph; Indirect Addressing; Pointer; Second Rank Pointer; Storage Unit
1 引言
作為最基本的編程語言之一,匯編語言的重要性勿庸置疑,即使是 Linux 程序員有時也需要使用匯編語言解決實際問題,理由很簡單:精簡、高效和 libc 無關(guān)性。假設(shè)要移植 Linux 到某一特定的嵌入式硬件環(huán)境下,首先必然面臨如何減少系統(tǒng)大小、提高執(zhí)行效率等問題,此時或許只有匯編語言能幫上忙了。我們常說匯編語言的抽象是C語言, 而C語言中最靈活是C語言中擁有“指針”這個數(shù)據(jù)類型。那么匯編語言和C語言中的指針有什么樣的關(guān)系呢?我們也知道在匯編語言中,幾乎所有對內(nèi)存的操作都是對給定地址的內(nèi)存進(jìn)行訪問來完成的,那么在匯編語言中,絕大多數(shù)操作也必然和地址(即指針)產(chǎn)生或多或少的聯(lián)系。匯編語言和CPU以及內(nèi)存,端口等硬件知識是連在一起的。匯編語言中存儲數(shù)據(jù)的地方不僅有寄存器而且還有存儲單元,更多的數(shù)據(jù)則保存在存儲單元中。因此,對編程人員而言,他肯定迫切地希望訪問內(nèi)存,以保存
更多的數(shù)據(jù),本文將重點闡述訪問數(shù)據(jù)的方式。
2 存儲空間圖的概念
畫一個圖形,或者觀察一個圖形,能幫助我們把復(fù)雜的程序設(shè)計具體化、形象化,有利于掌握程序之間的內(nèi)在聯(lián)系,從而更好的理解程序,激發(fā)大家對程序設(shè)計語言的興趣。本文用形象的圖形解釋C語言中指針以及匯編語言中間接尋址方式之間的相互關(guān)系。文中運用類似于存儲空間圖的方法對兩門語言進(jìn)行解釋。說它類似于存儲空間圖是因為這種圖形沒有用真正二進(jìn)制描述空間的值和空間的地址,姑且我把這種圖形叫做存儲空間圖。
3 兩門語言之間的內(nèi)在聯(lián)系
我們知道在計算機(jī)中,所有的數(shù)據(jù)都是存放在存儲器中的,訪問數(shù)據(jù)的方式并不是唯一的。在C語言中訪問單元數(shù)據(jù)有兩種常見方式,一是通過名字直接訪問單元數(shù)據(jù);二是通過指針訪問單元數(shù)據(jù)。直接通過單元名字訪問數(shù)據(jù),兩種語言都很簡單,我在這篇文章中不加以闡述。接下來我就分一級指針和二級指針分別闡述匯編語言和C語言是如何間接訪問內(nèi)存單元數(shù)據(jù),又是以怎樣的形式加以表現(xiàn)的。
3.1 C語言中的一級指針和匯編語言中一次間接尋址的聯(lián)系
3.1.1 C語言中一級指針定義
指針定義形如:數(shù)據(jù)類型 *指針變量,它的存儲空間圖表示如下:
圖1中X就是一級指針,Y是一個整形變量,X、Y的本質(zhì)區(qū)別在于X單元的值是用于存放內(nèi)存單元的地址,Y單元是存放任意類型的數(shù)據(jù)。X之所以指向Y,是因為Y單元的地址賦予了X,同時X所指向的類型和Y同類型。
圖1
3.1.2 匯編語言中的一次間接尋址是指通過寄存器或存儲單元一次間接尋找操作數(shù)。
它的存儲空間圖表示如下:
圖2中si是cpu中的一個寄存器,si中存放著Y所在單元的地址,Y是一個單元的名稱,Y單元存放著普通操作數(shù),si之所以指向Y,是因為Y單元的地址賦予了si。
圖2
圖1、圖2中X和si都是用于存放內(nèi)存單元的地址,我們從中可以得到啟迪,匯編語言中也存在著類似C語言的指針。
3.1.3 以下從編程角度深入探悉二者之間的聯(lián)系。
例1 用C語言指針的方法輸出a單元中的數(shù)據(jù):
main()
{int a=3,*p;
p=&a
printf("%d",*p); 3
}
例2 用間接尋址方法把a(bǔ)單元中的數(shù)據(jù)送往al寄存器中:
data segment
a db 3
data ends
……
lea si, a
mov al, [si]
……
以上程序均是操作存儲單元中的數(shù)據(jù),但都不是通過單元名字操作的。例1用C語言中一級指針的方法,例2用匯編語言中的寄存器間接尋址的方法。那么二者有怎樣的聯(lián)系呢?為了講清楚這個問題,我把這兩個程序分別用以下存儲空間圖表示:
圖3 C語言編程的存儲空間圖圖4 匯編語言編程的存儲空間圖
上圖中p和si其實質(zhì)都是一級指針,在C語言中是用指針指向的內(nèi)容,即用*p的形式來取得單元的數(shù)據(jù),而匯編語言是通過寄存器一次間接尋址方式來取得單元內(nèi)容,當(dāng)然這都要求指針p和寄存器si首先獲得單元的地址。(p=&a/lea si, a)。
3.2 C語言中的二級指針和匯編語言中二次間接尋址的聯(lián)系
3.2.1 C語言中二級指針的定義。
指針定義形如:數(shù)據(jù)類型 **指針變量,它的存儲空間圖表示如下:
圖5中X相對與Z這個變量是二級指針,它和一級指針的區(qū)別在于X這個指針?biāo)赶虻膬?nèi)容仍然是某個單元的地址(圖中是Z單元的地址)。要想輸出Z單元的內(nèi)容,則需要通過兩次指向才能完成。
圖5
3.2.2 匯編語言中二次間接尋址是指通過寄存器或存儲單元兩次間接尋找操作數(shù)。
它的存儲空間圖表示如下:
圖6中si其實就等價于圖5中定義的X,都是二級指針。但在匯編語言中si是一個指針寄存器,無論是作為一級指針還是作為二級指針,我們在使用的時候都是不需要定義的。事實上匯編語言中根本沒有一級指針和二級指針的定義,也就是說匯編語言中沒有C語言中定義上的繁瑣,但你仍可以用C語言的思想來解釋匯編語言中的指針問題。
圖6
3.2.3 以下從編程角度深入探悉二者之間的聯(lián)系。
例3 輸出以下字符串
main()
{char *p[] = {"ab", "cd", "ef"};
char **sp = p;
int i;
for(i=0; i
printf("%s", **(sp+i));
}
圖7 C語言編程的存儲空間圖
例4 累加數(shù)組array中元素和的程序段
data segment
array dw 10,20,30,40,50,60,70,80,90,100
count dw 10
sum dw?
table dw 3 dup(?);地址表
data ends
code segment
main proc far
assume cs:code, ds:data
start:push ds
……
mov table, offset ary
mov table+2, offset count
mov table+4, offset sum
mov bx, offset table
call proadd
ret
main endp
proadd procnear
……
mov si, [bx]
mov di, [bx+2]
mov cx, [di]
mov di, [bx+4]
xor ax, ax
next: add ax, [si]
add si, 2
loop next
mov [di], ax
……
proadd endp
code ends
end start
圖8 匯編語言編程的存儲空間圖
以上程序均是通過兩次操作才找出單元中的數(shù)據(jù),前者是用C語言中二級指針二次指向的方法,后者是用匯編語言中的兩次間接尋址的方法尋找操作數(shù)。從上圖可知這兩門語言的內(nèi)在聯(lián)系,即兩門語言最終都是通過指針兩次尋址來訪問操作數(shù)。所不同的是:前者是二級指針的概念,后者是兩次間接尋址。這種本質(zhì)相同,只是語言描述上有所不同的概念,從存儲空間圖的視角可以幫助我們更好的理解他們之間的聯(lián)系。
依此類推,對于多級指針的學(xué)習(xí),我們也可以借助存儲空間圖來幫助我們更好的分析程序,理解程序,對于一些復(fù)雜的問題給予簡化,對于不同語言之間的關(guān)系我們也能進(jìn)行更好的深入思考。
4 結(jié)束語
本文通過存儲空間圖深入淺出的探悉了兩門語言在尋找數(shù)據(jù)方面的聯(lián)系??梢哉fC語言的指針和匯編語言的尋址方式一直困擾著很多編程者,尤其對二級指針、二次間接尋址的理解及運用更加困難。文中的例題均以最簡單的題型來說明這些深奧的道理,而且從存儲空間圖的視角分析了二者之間的聯(lián)系。相信這篇文章,不僅能幫助我們運用存儲空間圖解釋問題、分析問題,而且能幫助我們更好的思考不同語言之間的聯(lián)系,更好的去思考程序設(shè)計。
參考文獻(xiàn):
[1] 裘宗燕. C++程序設(shè)計語言(特別版). 北京機(jī)械工業(yè)出版社, 2002.7.
[2] Standley B.lippman. C++ Primer中文版. 人民郵電出版社,20006.3.
[3] 譚浩強(qiáng). C程序設(shè)計(第二版). 清華大學(xué)出版社出版,2005.6.
[4] 錢能. C++程序設(shè)計教程. 清華大學(xué)出版社, 2005.5.
[5] 沈美明. IBM PC匯編語言程序設(shè)計. 清華大學(xué)出版社,1993.9.
篇5
1.指針的定義
指針定義格式如下:
類型關(guān)鍵字 *指針變量名
2.用指針表示變量
例1:
int*p;
int a;
p=&a;
“*”是乘號,又可以定義指針,還可以取指針?biāo)赶虻淖兞康膬?nèi)容。
#include
void main()
{
int *p,a;
int count=19;
p=&count;
a=*p;
printf("%d\n",a);
printf("%d\n",*p);
}
“*”放在可執(zhí)行語句中的指針之前,表示取指針?biāo)赶虻淖兞康膬?nèi)容。
“*”放在指針定義中時,稱指針定義符。
該程序運行結(jié)果如下:
19
19
3.用指針表示數(shù)組元素
例2:
int*p,*q;
int a[10];
p=a;
q=a[2];
#include
void main()
{
int a[5]={1,2,3,4,5};
int *p=a;
for(p=a;p
{
printf("%d",*p);
}
printf(“\n”) ;
}
該程序運行結(jié)果如下:
12345
該例中輸出的每個數(shù)組元素都是一個整型數(shù)。
#include
void main()
{
char a[]="ABCDE";
char *p=a;
for(p=a;p
{
printf("%c",*p);
}
printf("\n") ;
}
該程序運行結(jié)果如下:
ABCDE
該例中輸出的每個數(shù)組元素都是一個字符。
4.用指針表示字符串
#include
void main()
{
char *p,s[]="abcdefgh";
p=s;
printf("%s\n",p);
p=s+1;
printf("%s\n",p);
printf("%c\n",*p);
}
該程序運行結(jié)果如下:
abcdefgh
bcdefgh
b
使用格式控制符%s,輸出字符指針(即p)來輸出字符串。
使用格式控制符%c,輸出字符指針的間接(即*p)引用來輸出字符。
同樣的例子如下:
#include
void main()
{
char *p,s[]="abcdefgh";
p=s;
while(*p!='\0')
{
printf("%c",*p);
p++;
}
printf("\n");
p=s;
printf("%s\n",p);
p=s+1;
printf("%s\n",p);
}
該程序運行結(jié)果如下:
abcdefgh
abcdefgh
bcdefgh
#include
void main()
{
char a[]=”ABCDE”;
char *p=NULL;
for(p=a;p
{
printf(“%s\n”,p);
}
}
該程序運行結(jié)果如下:
ABCDE
BCDE
CDE
DE
E
#include
void main()
{
char a[]=”ABCDE”;
char *p=NULL;
for(p=a;p
{
printf(“%c”,*p);
}
}
該程序運行結(jié)果如下:
ABCDE
5.指針數(shù)組與指向數(shù)組的指針
指針數(shù)組就是數(shù)組元素為指針的數(shù)組。常用的指針數(shù)蘇是一維一級指針數(shù)組,即數(shù)組是一維的,元素是一級指針。
指針數(shù)組定義的格式如下:
類型說明 *數(shù)組名[大小] 例如:int*ap[5];ap是一維一級指針,該數(shù)組有5個元素,每個元素是一個一級指針。
在實際應(yīng)用中,常常使用一維一級指針數(shù)組來存放若干個字符串,這樣操作起來比較方便。
例:編程實現(xiàn)輸入星期幾的數(shù)字后,輸出該數(shù)字對應(yīng)的英文全名。
#include
char *name[]={"","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};
main()
{
int week;
while(1)
{
printf("Enter week No.:");
scanf("%d",&week);
if(week7) break;
printf("Week No. %d is %s\n",week,name[week]);
}
}
該程序中指針數(shù)組name經(jīng)初始化后有8個元素,name[0]不用,name[1]指向Monday,name[2]指向Tuesday …… 。
指向數(shù)組的指針,定義格式為:
int(*p)[4] 定義了一個指針,該指針指向二維數(shù)組,此二維數(shù)組每行有4個元素。
#include
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
main()
{
int (*p)[4];
p=a+2;
printf("%3d %3d %3d\n",p[0][0],p[1][1],p[-1][2]);
}
該程序運行結(jié)果如下:
907
6.用指針表示結(jié)構(gòu)體成員
#include
void main()
{
structperson{charname[9];intage;};
structpersonclass[10] = { "John",17,
"Paul",19,
"Mary",18,
"Adam",16,},*p;
p=class+2;
printf("%c\n",p->name[0]);
}
該程序運行結(jié)果如下:
M
#include
struct tt
{int x; struct tt*y;}*p;
struct tt a[4]={20,a+1,15,a+2,30,a+3,17,a};
main()
{int i;
p=a;
for(i=1;i
{ printf(“%d ”,p->x);
p=p->y;
}
}
該程序運行結(jié)果如下:
20 15
首先,指針p指向數(shù)組a的首地址,a[0]。在循環(huán)中,i=1時,因此時p指向a[0],因此p->x的值是20。a[0]的第二個成員表示為p->y,此值為a+1,即a[1]的地址,也就是把這個值更新了指針p,i=2時,p->x即為a[1]的成員x的值15。
本文主要歸納了C語言中指針的基本用法,熟練地掌握指針的基本用法,為指針在程序中的應(yīng)用打下一個良好的基礎(chǔ)。在以后的文章中將詳細(xì)介紹指針在程序中的應(yīng)用。
參考文獻(xiàn):
篇6
關(guān)鍵詞:C語言;指針;數(shù)組
中圖分類號:TP311文獻(xiàn)標(biāo)識碼:A文章編號:1009-3044(2010)19-5228-01
Studying the Pointer and Array Problem of C Language
LIU Wen-feng
(Computer and Information Engineering Department, Heze University, Heze 274015, China)
Abstract: Using examples and pointing the two highlights,this paper sdudys the pointer and array in solving some issues ,there is some degree equivalence; This paper has some guidance to the different levels and types of the C language developer.
Key words: C language; pointer; array
C語言課程,是計算機(jī)科學(xué)與技術(shù)以及相關(guān)學(xué)科專業(yè)的一門專業(yè)基礎(chǔ)課。該課程學(xué)習(xí)掌握的好壞對后繼課程有著非常重要的影響,而C語言課程中有兩天非常重要的部分,一個是數(shù)組,另一個是指針。數(shù)組有一維數(shù)組、二維數(shù)組等,學(xué)生理解相對容易,寫程序也很容易上手。而指針則是C語言課程中最難學(xué)習(xí)和掌握的內(nèi)容,雖然花費了大量的時間,但是也很難熟練運用。
1 結(jié)合實例剖析指針和數(shù)組的特點
下面我們給出實例來剖析指針和數(shù)組的特點,在主函數(shù)中間填寫一部分語句或使用單獨的函數(shù)以實現(xiàn)以下功能,求出1到1000之內(nèi)能被7或11整除但不能同時被7和11整除的所有整數(shù)并存放在數(shù)組aa中,并把滿足條件的值存入OUT.DAT中(我們事先已經(jīng)在相應(yīng)的目錄建好了一個空的記事本文件,文件名為OUT,擴(kuò)展名改為.DAT格式),同時輸出到執(zhí)行屏幕上,我們使用兩種方式分別加以實現(xiàn)。
1.1 基于指針的實現(xiàn)方法
首先使用指針來實現(xiàn)該函數(shù)的功能。
#include
#include //使用到的頭文件
void writeDAT();//聲明寫函數(shù)
void countValue(int *a,int *n);//聲明編寫函數(shù),變量均使用指針
void main()
{ int aa[1000],n,k;//定義所需變量
system("CLS");//清楚屏幕內(nèi)容
countValue(aa,&n);//轉(zhuǎn)入countValue執(zhí)行
for(k=0;k
if((k+1) %10 ==0)
{printf("%5d",aa[k]);
printf("\n"); }
else printf("%5d",aa[k]);/*以上for語句是實現(xiàn)結(jié)果的屏幕輸出*/
writeDAT();/*執(zhí)行輸出語句的函數(shù)*/}
void writeDAT()//寫函數(shù)的具體實現(xiàn)
{ int aa[1000],n,k;
FILE *fp;//使用文件指針
fp=fopen("out.dat","w");//以寫方式打開文件out.dat
countValue(aa,&n);//再執(zhí)行一次countValue函數(shù)
for(k=0;k
if((k+1)%10==0)
{ fprintf(fp,"%5d",aa[k]);
fprintf(fp,"\n"); }
else fprintf(fp,"%5d",aa[k]);/*以上for語句是實現(xiàn)aa中的數(shù)據(jù)寫入文件out.dat中,每行顯示10個 */
fclose(fp);//關(guān)閉所打開的文件
}
以下是使用指針對函數(shù)countValue的具體實現(xiàn)。
void countValue(int *a,int *n) /*定義傳遞指針變量a為數(shù)組指針和n統(tǒng)計滿足條件的個數(shù)指針*/
{ int i;
*n=0; //對指針變量所指內(nèi)容賦初值
for(i=1;i
{if((i%7==0 && i%11!=0)||(i%7!=0 && i%11==0))/*如果i的值滿足能被7整除同時又不能被11整除;或者i的值滿足不能被7整除同時必須能被11整除。滿足這兩個條件之一即符合條件*/
{*a++=i;*n=*n+1;}}}
語句*a++=i,可以分為兩句來實現(xiàn)。即*a=i,a=a+1;語句*a=i是把變量i的值存入指針a所指地址的變量空間中;語句a=a+1指的是指針變量a指向下一個數(shù)據(jù)單元。
1.2 基于數(shù)組的實現(xiàn)方法
以下是數(shù)組的實現(xiàn)方法。
#include
#include //使用到的頭文件
void main()
{ FILE *fp;//定義文件類型指針
int i,aa[1000],n=0,k; //定義所需變量
system("CLS");//清楚屏幕內(nèi)容
for(i=1;i
{if((i%7==0 && i%11!=0)||(i%7!=0 && i%11==0))/*如果i的值滿足能被7整除同時又不能被11整除;或者i的值滿足不能被7整除同時必須能被11整除。滿足這兩個條件之一即符合條件*/
{aa[n]=i;n++;}}//把滿足條件的數(shù)據(jù)存入數(shù)組aa中,個數(shù)n值增1
for(k=0;k
if((k+1) %10 ==0)
{printf("%5d",aa[k]);
printf("\n"); }
else printf("%5d",aa[k]); //以上for語句是實現(xiàn)把結(jié)果輸出到屏幕上
fp=fopen("out.dat","w");//以寫方式打開文件out.dat
for(k=0;k
if((k+1)%10==0)
{ fprintf(fp,"%5d",aa[k]);
fprintf(fp,"\n");
}else fprintf(fp,"%5d",aa[k]); /*以上for語句是實現(xiàn)aa中的數(shù)據(jù)寫入文件out.dat中,每行顯示10個 */
fclose(fp); //關(guān)閉所打開的文件
}
數(shù)組實現(xiàn)相對較簡單,也很容易理解和掌握。這種方法沒有使用單獨的函數(shù),由于該函數(shù)簡單,直接放到主程序當(dāng)中來實現(xiàn),當(dāng)然也沒有用到參數(shù)傳遞。避免了在參數(shù)使用和參數(shù)傳遞中的不必要的錯誤。
這兩種方法,前一種方法使用參數(shù)傳遞,在參數(shù)傳遞和地址傳遞中,指針有其非常優(yōu)越的特性,利用指針我們實現(xiàn)了相應(yīng)功能。但在具體使用中,雖然語句較少,指針在理解和學(xué)習(xí)過程中相對復(fù)雜。如在函數(shù)中的參數(shù)傳遞過程中,對整型變量n的傳遞使用的是變量n的地址&n,而不是n本身;對數(shù)組aa[1000]在函數(shù)傳遞中使用整型指針a,而不是*a或&a。
2 結(jié)束語
目前很多已經(jīng)成型的編程專家,在很多情況下都不使用指針,特別是在大型軟件程序的開發(fā)中。因為指針非常靈活和方便,在具體使用中很容易出現(xiàn)引用錯誤和指向錯誤的問題,與此同時這些錯誤在調(diào)試和測試中又是很難被發(fā)現(xiàn)的。數(shù)組雖然沒有指針靈活,但我們可以實現(xiàn)與指針相同的效果,例如很多國外的編程專家都不使用指針,而使用數(shù)組來替代它。這樣就避免了很多不必要的麻煩。也不是說大家都不要學(xué)習(xí)指針了,都來學(xué)數(shù)組。如果你是軟件開發(fā)的新手,建議少使用指針,當(dāng)然如果你是多年的編程專家并且對C語言掌握的非常透徹,指針當(dāng)然是較好的選擇。
參考文獻(xiàn):
[1] 李明輝,丁海艷,萬克星,等.全國計算機(jī)等級考試上機(jī)考試題庫――三級網(wǎng)絡(luò)技術(shù)[M].成都:電子科技大學(xué)出版社,2008.
[2] 譚浩強(qiáng).C語言程序設(shè)計教程[M].3版.北京:高等教育出版社,2006.
篇7
關(guān)鍵詞:C++語言程序設(shè)計;函數(shù)指針;分析研究
中圖分類號:TP311.11 文獻(xiàn)標(biāo)識碼:A文章編號:1007-9599 (2011) 24-0000-01
Analysis and Research of Function Pointers for C++ Language Programming
Zhang Suxia
(Shandong Rural Credit Cooperatives,Qingdao266550,China)
Abstract:Pointer as C++ language programming is an important concept,its application is the C++ Programming Language is very important content.Pointer as a special type of data structure,which can effectively express complex data between the logical structure of the relationship.Flexible and correctly use the pointer to the design of the program with a lot of convenience,the application of which the most significant effect is a function pointer,by using the function pointer,you can call the function can get multiple return values,and to deal directly with memory addresses and so on.This article from the introduction of C++ language program design,function pointer to talk about,and then a detailed description of the use of C++ language program design function pointers need to pay attention to the,the final C++ language program design,function pointers application techniques carried out a systematic analysis.
Keywords:C++ Language Programming;Function pointer;Analysis
一、認(rèn)識C++語言程序設(shè)計中的函數(shù)指針
(一)指針與函數(shù)。在C++語言程序設(shè)計中,將指針與函數(shù)結(jié)合在一起使用具有非常豐富的內(nèi)涵。比如說,可以把指針作為函數(shù)的參數(shù)來使用,也可以把指針作為函數(shù)的返回值,另外,指針可以指向函數(shù)成為函數(shù)指針等。在C++語言程序設(shè)計中,用指針作函數(shù)的參數(shù),從而實現(xiàn)地址傳參的調(diào)用。而所謂的調(diào)用就是系統(tǒng)自動將實參地址的值賦給其所對應(yīng)的形參指針,從而使形參指針指向?qū)嶋H參數(shù)變量。這樣一來,形參在函數(shù)體內(nèi)的變化,將會直接影響到調(diào)用函數(shù)中與之對應(yīng)的實參的值。
(二)區(qū)別指針函數(shù)與函數(shù)指針的概念。由于函數(shù)的類型是按照函數(shù)返回值的類型來定義的,所以把返回值為指針類型的函數(shù)稱為指針函數(shù)。其中需要說明的是如果使用某變量的地址來充當(dāng)函數(shù)的返回值的話,還需要考慮地址所對應(yīng)的變量空間是否還在被占用,若地址空間已經(jīng)被釋放掉,那么其中的數(shù)據(jù)就有可能發(fā)生了變化,這樣的話就需要將相應(yīng)的變量設(shè)置為靜態(tài)變量,否則的話,就不能實現(xiàn)正確傳遞參數(shù)的效果。還有一點要說明的就是在使用指針函數(shù)時,必須把接收函數(shù)值的變量設(shè)置為指針,而且其數(shù)據(jù)類型必須與返回值的數(shù)據(jù)類型相同。
由于指針變量不僅可以指向不同的數(shù)據(jù)類型,同時還可以指向函數(shù),其中把指向函數(shù)入口地址的指針稱為函數(shù)指針。函數(shù)指針作為C++語言程序設(shè)計中函數(shù)與指針結(jié)合應(yīng)用的一個重要概念,函數(shù)指針的作用就是用來在函數(shù)間進(jìn)行函數(shù)參數(shù)的傳遞。
在C++語言程序設(shè)計中常常會把指針函數(shù)與函數(shù)指針兩個概念混淆起來,實際上,明白二者的實質(zhì)后,二者完全是兩個不同的概念,其最為顯著的區(qū)別就在于函數(shù)指針中的指針是指向函數(shù)入口的,而指針函數(shù)中的指針是指向函數(shù)出口的,所以在使用時一定要把握好二者的區(qū)別,正確使用。
二、使用C++語言程序設(shè)計函數(shù)指針需要注意的問題
盡管函數(shù)指針的使用可以為程序設(shè)計帶來很多的方便,但是由于指針變量自身存在的缺陷,所以在使用中如果不小心的話就會出現(xiàn)錯誤,嚴(yán)重的話就可能導(dǎo)致系統(tǒng)的崩潰,所以這里有必要就C++語言程序設(shè)計函數(shù)指針應(yīng)用中經(jīng)常出現(xiàn)的問題進(jìn)行說明。
第一、指針變量初始值的賦值問題。盡管指針變量是指向的是相應(yīng)數(shù)據(jù)變量的存儲地址,但是在使用該指針變量前必須對指針變量的初值進(jìn)行賦值,如果不對其賦值的話,系統(tǒng)就會隨機(jī)對其進(jìn)行賦值,顯然,這就會導(dǎo)致比較嚴(yán)重的錯誤。
第二、指針變量所指對象的存儲單元單元分配問題。在對指針變量所指的對象進(jìn)行賦值時需要為其所指的對象分配充足的存儲單元,如果存儲單元分配不足的話也將會發(fā)生一系列的錯誤。
第三、在操作前不對指針的值是否為空就進(jìn)行操作的問題。對于一個值為空的,它的值為空的指針類型變量而言,它是不指向任何變量的,如果強(qiáng)制對它進(jìn)行操作的話,就可能會出現(xiàn)如下的幾種情況:一是禁止讀寫;二是只允許讀而不允許寫;三是既允許讀又允許寫的三種不合法的存儲區(qū)域賦值問題,顯然,這一問題所造成的錯誤勢必會非常嚴(yán)重。
第四、函數(shù)按地址引用時參數(shù)的誤用問題。函數(shù)參數(shù)的引用包括按值引用和按地址引用兩種不同的引用方式,其中按值引用的是數(shù)值而按地址引用的是地址,二者是不一樣的,一定要區(qū)分開來,不能混淆。
三、C++語言程序設(shè)計中函數(shù)指針的應(yīng)用技巧分析
函數(shù)指針作為一種具有特殊用途的指針,它廣泛的應(yīng)用于C++語言程序設(shè)計中。其中C++語言程序設(shè)計中的函數(shù)指針主要用于調(diào)用函數(shù)以及充當(dāng)函數(shù)的參數(shù)這兩個方面。而C++語言程序設(shè)計中函數(shù)指針的應(yīng)用是有技巧的,其使用技巧如下:
第一、多態(tài)機(jī)制的實現(xiàn)。在C++語言程序設(shè)計中使用函數(shù)指針來實現(xiàn)多態(tài)機(jī)制是比較復(fù)雜的,其中主要是通過虛函數(shù)表來實現(xiàn)的,其中虛函數(shù)表中存放的就是由函數(shù)指針組成的數(shù)組,由這些函數(shù)指針來指向?qū)嶋H所要調(diào)用的函數(shù)。
第二、回調(diào)函數(shù)。所謂的回調(diào)函數(shù)可以這樣的來理解,如果把某個函數(shù)的指針作為參數(shù)將其傳遞給另一個函數(shù)時,當(dāng)這個指針用來指向函數(shù)時,就是回調(diào)函數(shù)。在C++語言程序設(shè)計中回調(diào)函數(shù)應(yīng)用的比較廣泛,舉個例子,譬如Win32程序設(shè)計中的WinProc其實就是一種回調(diào)函數(shù),它主要是用來處理窗口的相關(guān)消息。
第三、取代分支語句。分支語句在程序維護(hù)上往往具有一定的限制,然而函數(shù)指針的應(yīng)用可以很好的解決這一問題。
參考文獻(xiàn):
[1]張海平.C/C++語言中函數(shù)指針的深入分析與應(yīng)用[J].軟件開發(fā)與設(shè)計,2009(22)
篇8
下咽癌是一種惡性腫瘤,原發(fā)于喉部以外的喉咽或者下咽部,臨床上的發(fā)病率不高,對其影響報道因而不多,我院對收治的38例下咽癌患者的臨床資料進(jìn)行回顧性分析,所有病例都經(jīng)手術(shù)及其局部穿刺病理證實,對CT應(yīng)用于下咽癌的鑒別與診斷進(jìn)行探討,具體報告如下。
1 資料與方法
1.1一般資料
本文資料選擇我院自2003-2010年所收治的下咽癌患者共38例,其中男34例,女4例,年齡37-70歲,平均年齡55.4±2.3歲,臨床上的癥狀表現(xiàn)為,咽部出現(xiàn)異物感患者18例,吞咽困難患者17例,聲音嘶啞患者22例,咽喉部疼痛患者23例,頸部包塊患者13例,4例患者伴隨呼吸困難,以上所有病例均經(jīng)過手術(shù)及局部穿刺病理證實,其中經(jīng)手術(shù)患者20例,鱗狀上皮細(xì)胞癌是其主要病理特征,其中有13例高分化的鱗狀上皮細(xì)胞癌,11例中分化鱗狀上皮細(xì)胞癌,7例低分化鱗狀上皮細(xì)胞癌,5例中至高分化鱗狀細(xì)胞癌,3例低至中分化鱗狀細(xì)胞癌。
1.2方法
CT掃描儀選擇Siemens Somatom Plus或者Somatom Plus4全身掃描儀,其掃描平面需要與硬腭平行,舌骨平面到環(huán)狀軟骨下緣,為掃描儀掃描范圍,層厚度為5mm,視為連續(xù)掃描,若為螺旋掃描,層厚應(yīng)為5mm,螺距應(yīng)為1,其中28例需要行增強(qiáng)掃描。
1.3統(tǒng)計學(xué)方法
應(yīng)用SPSS10.0軟件包對其資料進(jìn)行統(tǒng)計學(xué)處理分析。
2 結(jié)果
2.1下咽癌具體分型分析
依據(jù)病灶位置及其下咽解剖結(jié)構(gòu)分析,本組病例分為,下咽上區(qū)癌(圖1、2)其病灶主要位于會厭前間隙與會厭舌面,舌骨與會厭間,表現(xiàn)為軟組織腫塊,其中明顯有4例腫塊較大,占據(jù)會厭前間隙,同時侵犯口底、舌根部,另有5例伴隨著頸部淋巴結(jié)轉(zhuǎn)移,梨狀窩癌(圖3-6),發(fā)生于左側(cè)14例,發(fā)生右側(cè)12例,咽后壁癌或者環(huán)后癌(圖7-9),共有5例,有3例患者為咽后壁癌,2例環(huán)后癌,混合型癌患者3例。
2.2下咽癌患者CT具體診斷
病變部位,位于會厭舌面的腫塊有4例患者,梨狀窩患者26例,下咽后壁患者3例,環(huán)后區(qū)2例,混合型3例,梨狀窩,環(huán)后區(qū)及其咽后壁為腫塊的廣泛侵入部位,沿黏膜與病灶表現(xiàn)為浸潤性生長,也隨之會形成不規(guī)則腫塊,同周圍的結(jié)構(gòu)組織界限不夠明晰。病變的密度,通過平掃發(fā)現(xiàn)為等或者低密度,其密度同頸動脈鞘內(nèi)的血管密度相一致,不過略低于雙側(cè)下頜下腺及其胸鎖乳突肌的密度,同時其密度與口底舌肌區(qū)別明顯,通過增強(qiáng)掃描發(fā)現(xiàn)腫塊出現(xiàn)顯著的不均勻強(qiáng)化,且梨狀窩出現(xiàn)變窄或者消失現(xiàn)象,咽后組織明顯增厚,喉鄰近結(jié)構(gòu)受累,腫瘤波及喉與喉旁結(jié)構(gòu),出現(xiàn)了聲門裂變形,旋轉(zhuǎn)或者轉(zhuǎn)移,喉軟骨也發(fā)生破壞,同時頸部淋巴結(jié)轉(zhuǎn)移,食管與其他結(jié)構(gòu)明顯受累,食管壁增厚,出現(xiàn)軟組織腫塊。
3 討論
所謂下咽即為喉咽,部位在4-6頸椎前,喉的兩旁及其后方,上界與會厭平,下界環(huán)狀軟骨下緣平,下部與食管連接,其黏膜面包含會厭舌面與舌根下部,下咽側(cè)壁與后壁。下咽可分為四區(qū),其一為下咽上區(qū),其包括會厭舌面,會厭溪與舌根,其二為梨狀窩區(qū),分別位于左右,上界是為舌會厭側(cè)皺襞,舌甲膜為外側(cè)上部,甲狀軟骨翼板[1]。其三為下咽后壁區(qū),上部為會厭,下部為環(huán)咽肌間下咽后壁。其四為環(huán)后區(qū),從上到下依次為環(huán)杓關(guān)節(jié)面,環(huán)狀軟骨下緣,前后壁依次為,環(huán)狀軟骨后黏膜與椎前黏膜。
下咽癌其屬于喉癌,一般分為喉內(nèi)喉外,喉內(nèi)癌一般限于喉內(nèi),發(fā)展較為緩慢,擴(kuò)散也較為晚,另喉外癌則則是起源于喉的下咽,生長快,轉(zhuǎn)移較早,依據(jù)1961年的第七屆國際耳鼻咽喉會議[2],其將下咽癌分出單列。
對于下咽癌來說,普遍較為少見,據(jù)國內(nèi)統(tǒng)計,在全身惡性腫瘤中僅占據(jù)0.15%-2.2%,普遍來說分為梨狀窩癌,其占75%-87%,下咽后壁癌則占5%-22%[3],下咽上區(qū)癌占9%,梨狀窩癌普遍容易在黏膜下浸潤性生長,甲狀軟骨板后部逐漸被其侵犯,向上侵犯舌根部,向內(nèi)侵入喉部與喉旁間隙,出現(xiàn)了喉旁間隙增寬現(xiàn)象,密度明顯升高,聲帶出現(xiàn)右側(cè)移位,淋巴結(jié)轉(zhuǎn)移,轉(zhuǎn)移至頸內(nèi)靜脈淋巴結(jié)。
通過本文結(jié)果分析,下咽癌頸部淋巴結(jié)發(fā)生轉(zhuǎn)移的可能性較高,據(jù)相關(guān)文獻(xiàn)報道高達(dá)50%,本組為78.2%[4],其中聲帶發(fā)生轉(zhuǎn)移的情況較少見,而聲門上型癌與跨聲門癌發(fā)生轉(zhuǎn)移的情況較多,此為CT診斷的結(jié)果,更加清晰地顯示了腫瘤的部位,顯示了黏膜面的情況還有喉內(nèi)侵犯的情況,特別是對腫瘤的侵犯范圍,CT檢查更加準(zhǔn)確,其中包括對喉軟骨、聲門旁間隙與會厭前間隙,診斷鑒別都較高[5]。且通過CT診斷可以區(qū)分下咽癌與喉癌,兩者雖病變部位較為接近,但在CT診斷下,下咽癌是發(fā)生于喉的兩側(cè)或者下方,而喉癌也不同,為發(fā)生于喉腔粘膜的惡性腫瘤。這是CT診斷的兩者差別。
通過本文分析,下咽癌通過CT檢查診斷,還是較為準(zhǔn)確的,值得臨床上的廣泛推廣使用。
參 考 文 獻(xiàn)
[1]屠規(guī)益.現(xiàn)代頭頸腫瘤外科學(xué)[M].北京:科學(xué)出版社,2004,594.
[2]黃選兆,汪吉寶.實用耳鼻眼科學(xué)[M].北京:人民衛(wèi)生出版社,1998,398-402.
[3] 周蓉先,羅建天,李逸塵. 喉咽癌的咽-食道鋇劑造影和CT掃描檢查. 復(fù)旦學(xué)報,2009,30:269.
篇9
【關(guān)鍵詞】 抗CCP抗體;RF因子;類風(fēng)濕關(guān)節(jié)炎;應(yīng)用價值
類風(fēng)濕關(guān)節(jié)炎(RA)以慢性關(guān)節(jié)炎性反應(yīng)為主要表現(xiàn), 是一種結(jié)締組織病。如果不及時給予恰當(dāng)治療, 將會引發(fā)不可逆轉(zhuǎn)的骨關(guān)節(jié)破壞。因此早期確診利于控制病情、改善預(yù)后具有重要意義。鄭州市第九人民醫(yī)院對118例RA及85例非RA患者的血清抗CCP抗體、RF進(jìn)行檢測, 探討二者聯(lián)合檢測對RA診斷的價值, 現(xiàn)報告如下。
1 資料與方法
1. 1 一般資料 ①RA組:本組118例均為2009年7月~2013年7月于本院就診的RA患者, 男45例, 女73例, 年齡21~83歲, 平均(42.2±12.5)歲, 均符合1987年美國風(fēng)濕病協(xié)會修訂的關(guān)于RA分類的診斷標(biāo)準(zhǔn)。②非RA組:本組85例均為同期于本院就診的其他自身免疫性疾病患者, 男36例, 女49例, 年齡在18~79歲, 平均(39.7±12.1)歲, 其中系統(tǒng)性紅斑狼瘡(SLE)26例、骨性關(guān)節(jié)炎(OA)19例, 強(qiáng)直性脊柱炎(AS)13例、硬皮病9例、干燥綜合征(SS)8例, 混合性結(jié)締組織?。∕CTD)5例, 皮肌炎3例, 血管炎2例。兩組在性別、年齡、患病類型、臨床表現(xiàn)等方面差異無統(tǒng)計學(xué)意義。
1. 2 實驗方法 本組所有病例均于晨起空腹靜脈采血3 ml, 經(jīng)自然凝固后分離血清保存于-20℃待測。①抗CCP抗體檢測:采用酶聯(lián)免疫吸附法(ELISA), 試劑由歐洲診斷公司提供, 采用Stat fax-2100型酶標(biāo)儀檢測吸光度, 嚴(yán)格按照說明書操作, 結(jié)果以>25 U/ml判定為陽性。②RF檢測:采用透射比濁法, 試劑儀器為全自動特種蛋白儀, 嚴(yán)格按照說明書操作, 結(jié)果以>25 U/ml判定為陽性。
1. 3 統(tǒng)計學(xué)方法 采用SPSS18.0統(tǒng)計軟件進(jìn)行數(shù)據(jù)處理, 采用四格表計算抗CCP抗體及RF的敏感性和特異性, 組間比較采用χ2檢驗, P
2 結(jié)果
RA、非RA患者抗CCP抗體、RF檢測結(jié)果見表1, RA診斷結(jié)果顯示:抗CCP抗體敏感性為78.8%, 特異性為89.4%;RF因子敏感性為89.0%, 特異性為65.9%;抗CCP抗體和RF聯(lián)合檢測對RA進(jìn)行診斷敏感性為98.2%, 特異性為59.6%。抗CCP和RF因子聯(lián)合檢測診斷RA可明顯提高敏感性, 但特異性下降, 差異具有統(tǒng)計學(xué)意義(P
3 討論
類風(fēng)濕關(guān)節(jié)炎(RA)是一種常見的自身免疫疾病, 具有高發(fā)性、高致殘性等特點, 關(guān)節(jié)及周圍組織呈對稱性, 可引發(fā)多種并發(fā)癥。臨床治療RA的目標(biāo)是確保疾病無進(jìn)展, 使之保持正常的生理功能, 以達(dá)到緩解病情的目的。因此對RA早期進(jìn)行診斷確診是治療的關(guān)鍵。目前診斷RA多依賴癥狀、X線改變以及對RF的檢測, 但臨床表現(xiàn)多不典型, 易錯失治療時機(jī), 而RF的檢測具有局限性, 敏感但特異性低, 在其他的結(jié)締組織疾病, 如系統(tǒng)性紅斑狼瘡以及部分健康老人的血清里都可以檢測出, 因此給臨床確診帶來困難。
抗環(huán)瓜氨酸肽抗體(CCP)是環(huán)狀聚絲蛋白的多肽片段, 可在RA早期出現(xiàn), 通常是RA患者還未出現(xiàn)關(guān)節(jié)損傷之前就能檢出, 對類風(fēng)濕性關(guān)節(jié)炎(RA)具有較高的特異性, 可克服RF存在的不足。本研究對118例RA患者和85例非RA患者血清抗CCP抗體、RF進(jìn)行平行檢測, 特異性差異具有統(tǒng)計學(xué)意義??笴CP抗體較RF具有較高的特異性(89.4%)可避免臨床誤診;聯(lián)合檢測可提高試驗敏感性(98.2%)降低了RF對早期RA的漏診率[1]。聯(lián)合檢測診斷RA可靠有效, 對于RA早期治療與干預(yù)、阻斷病情發(fā)展、提高患者生活質(zhì)量具有重要意義。
篇10
【關(guān)鍵詞】 兒童;鼻竇炎;CT;診斷
兒童鼻竇炎是兒科常見病之一, 但其臨床表現(xiàn)多不具有典型特點, 影像學(xué)檢查常有卡瓦氏位X線片, 近年來多排CT掃描檢查對鼻竇炎的檢查逐漸增多。作者收集對比了一組臨床診斷為鼻竇炎的患兒, 現(xiàn)將檢查結(jié)果報告如下。
1 資料與方法
1. 1 一般資料 90例臨床初步診斷為兒童鼻竇炎患兒, 均為門診患者, 其中男56例, 女34例, 年齡3~12歲, 病程大于4周, 全部病例均有間斷鼻塞、流膿涕, 不規(guī)律頭暈表現(xiàn), 65例有陣發(fā)性咳嗽表現(xiàn), 其中有夜間咳嗽表現(xiàn) 15例。10例患兒有間斷耳鳴癥狀。
1. 2 方法 所有患兒先行X線卡瓦氏位CR數(shù)字?jǐn)z片, 并進(jìn)行影像學(xué)專業(yè)分析判斷。然后行鼻竇冠狀位或軸位16排CT掃描。冠狀位掃描40例:掃描基線與硬腭垂直, 范圍包括額竇前緣至蝶竇后緣, 厚3 mm, 層間距3 mm。軸位掃描 50例, 以平行于眶耳線為基線, 掃描范圍從上頜骨齒槽突至額竇上方, 層厚 3 mm, 間距 3 mm。掃描后對所得數(shù)據(jù)進(jìn)行三維重建, 并進(jìn)行專業(yè)影像學(xué)分析。二種方法均采用雙盲法, 分別由不同放射科、CT醫(yī)師進(jìn)行專業(yè)攝片、分析。
2 結(jié)果
90例病兒中, 70例X線卡瓦氏位攝片影像學(xué)表現(xiàn)為上頜竇炎, 表現(xiàn)為黏膜增厚, 10例提示有上頜竇積液, 3例具有額竇炎影像學(xué)表現(xiàn), 黏膜增厚。2例具有下鼻甲肥大影像學(xué)表現(xiàn), 1例具有鼻中隔偏曲影像學(xué)表現(xiàn)。90例CT掃描均具有上頜竇黏膜增厚征象, 5例有典型上頜竇積液表現(xiàn)。30例具有篩竇炎影像學(xué)表現(xiàn), 10例具有蝶竇炎影像學(xué)表現(xiàn), 21例具有額竇炎影像學(xué)表現(xiàn)。另外診斷下鼻甲肥大25例, 鼻中隔偏曲8例, 腺樣體增生20例。
3 討論
兒童鼻竇炎是耳鼻喉科的常見病[1], 多表現(xiàn)為鼻堵、流膿涕、頭痛、咳嗽等, 與一般的上呼吸道感染不容易區(qū)別。由于小兒有很多同時合并腺樣體肥大等疾病, 也更容易患上呼吸道感染, 故鼻竇炎容易反復(fù)發(fā)作。額竇和蝶竇一般在2~3歲后才開始發(fā)育, 故受累較遲。兒童鼻腔相對狹窄, 鼻腔炎癥時黏膜充血、水腫, 鼻甲腫大, 以至鼻道堵塞, 引流不暢, 易引發(fā)鼻后滴漏, 鼻涕后流咽部, 刺激咽部而出現(xiàn)咳嗽、惡心、干嘔, 呼吸有臭味等癥狀。這些癥狀常導(dǎo)致誤診、漏診, 延誤治療。既往鼻竇部攝片為常規(guī)檢查手段, 對成人鼻竇炎的診斷具有重要參考價值。但近年發(fā)現(xiàn)兒童鼻竇炎診斷常常出現(xiàn)攝片不能正確診斷情況。高分辨率CT應(yīng)用以來, 在很多臨床科室應(yīng)用廣泛, 對疾病的確診提供了依據(jù)。同樣鼻竇 CT 掃描為鼻竇炎的診斷提供可靠依據(jù)[2], 是對鼻竇炎評估、辨別解剖變異最有價值的影像學(xué)技術(shù)。本組臨床資料表明, 鼻竇部CT影像學(xué)檢查較X線檢查具有明顯優(yōu)勢。不僅在診斷上頜竇炎具有確診率達(dá)100%, 在其他鼻竇炎的檢查方面以及合并癥、并發(fā)癥方面具有明顯優(yōu)勢。本組資料共發(fā)現(xiàn)下鼻甲肥大發(fā)生率28%, 鼻中隔偏曲發(fā)生率達(dá)9%, 篩竇炎及蝶竇炎不易在X線下發(fā)現(xiàn), 但CT檢查極易發(fā)現(xiàn)診斷, 同時上頜竇積液在X線下也易出現(xiàn)誤診, 經(jīng)CT證實為上頜竇積液者僅占50%。 本組資料與吳彩霄等[3]報道較一致。CT掃描與三維重建對于鼻竇的解剖關(guān)系以及各竇腔發(fā)育具有明顯的直觀效果, 從而對于各型鼻竇炎的進(jìn)一步治療具有明顯優(yōu)勢[4, 5]。能準(zhǔn)確顯示病變部位、形態(tài)、范圍等。
綜上所述, 對兒童鼻竇炎診斷應(yīng)以CT檢查為主, 疑似兒童鼻竇炎患者應(yīng)行CT掃描, 以減少誤診、漏診。
參考文獻(xiàn)
[1] 張革化,李源.兒童鼻竇炎.國外醫(yī)學(xué)耳鼻咽喉科學(xué)分冊, 2000, 24(2):86-87.
[2] 鐘興,李恒國,齊玲俊,等. 鼻腔和鼻竇炎性疾患的CT分析. 臨床放射學(xué)雜志, 2000,19(08): 481-483.
[3] 吳彩霄,宋金銘,孫中武,等.鼻竇CT掃描對兒童鼻竇炎性疾患的臨床意義探討.中國實用兒科雜志, 2002,17(8):489-490.