c語言范例6篇

前言:中文期刊網精心挑選了c語言范文供你參考和學習,希望我們的參考范文能激發你的文章創作靈感,歡迎閱讀。

c語言

c語言范文1

關鍵詞: C語言 指針 函數 數組

“指針”是C語言中廣泛使用的一種數據類型,運用指針編程是C語言最主要的風格之一。利用指針可以表示各種數據結構,它與函數、數組的使用和傳遞數據有密切聯系,能方便地訪問數組,還能像匯編語言一樣處理內存地址,從而編出精致而高效的程序。指針極大地強化了C語言的功能。學習指針是學習C語言最重要的一環,能否正確理解和使用指針是判斷是否掌握了C語言的重要標志。但是指針也是C語言最危險的特性,如果使用不當,則很容易指到意想不到的地方,產生錯誤也很難發現。因此,對于初學者來說,應特別注意指針的應用。怎樣才能應用好指針呢?下面筆者以在計算機C語言教學中的體會與大家進行探討。

一、理解指針

在C語言中任何數據只要定義了,在內存中就是有一定的存儲單元的。存儲單元就是變量在計算機中的存儲地址,指針就是用來表示這些地址的變量。所以簡單地說,指針就是地址,變量的指針就是變量的地址,這里還涉及一個概念就是指針變量,所謂指針變量就是用來存放指針(地址)的變量。例如:int a;假設a的地址是2000,而2000又存儲在變量point中,那么變量point就是指針的變量簡稱指針變量,a就是指針變量所指向的變量。很多初學者都存在這樣的誤區:既然指針放的是地址,而2000正好是變量a的地址,那么對于指針point就可以這樣賦值:point=2000,這是錯誤的,這里的2000表示的不是地址是一個整型數據。所以對于指針變量的賦值只能用取地址運算符“&”進行賦值即:point=&a;&a即為a的地址。

二、指針與函數

指針作為C語言的精華有很多用途,除具有一般的功能外,其中具體特殊功能的應用總結起來有三個方面:一是用于在函數中可以返回多個值;二是可以實現動態調用函數;三是實現數組的動態定義。其中,普通變量作為函數的參數,傳遞的是變量的值,因此只能帶回一個返回值,但在有些場合需要返回多個值,這就必須用到指針做函數的參數,因為指針作為參數傳遞的是地址,讓實參和形參指向同一個變量的地址,N個形參所指向的變量的值改變了,N個實參的值也自然改變了,從而實現了帶回多個返回值。這里舉個例子,編寫一個函數實現兩個數從小到大輸出。這個程序需要子函數實現兩個數的交換,把交換后的兩個值通過指針傳回主函數輸出,傳回來的是兩個值。所以普通變量做函數的參數是無法實現的,只能用指針作為函數的參數。具體實現:

子函數實現交換:

swap(p1,p2)

int *p1,*p2;

{int p;

p=*p1;

*p1=*p2;

*p2=p;

}

主程序實現調用,輸出:

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

}

由此可見,要通過函數調用得到N個返回值可以通過以下三步實現:(1)主調函數中設N個變量,用N個指針指向他們;(2)將指針變量作實參,將N個變量的地址傳給形參;(3)通過形參指針變量指向的改變,改變N個變量的值。最后主調函數中就可以得到N個變量的返回值。

三、指針與數組

前面提到任何數據都有存儲單元,都有指針。所以,從這個角度出發可以將指針分為:指向變量的指針、數組指針、字符指針、指向指針的指針、函數指針、結構變量的指針及文件指針,等等。其中,指向變量的指針就是存儲變量的地址的,這是指針最簡單的一種類型。那么一個變量有地址,一個數組有若干個元素,每個元素都有一個地址,所謂數組的指針,就是指數組的名稱,實際上是指向整個數組空間的起始地址。數組元素的指針是數組元素的地址。例如:int a[10];int*p;這里的數組名a就是數組的首地址,本質上是一個指針。a[2]表示距離a指向空間向后2個位置所在空間中的存放的值,所以a[2]=*(a+2)。那么如果讓p=a,p就是指向數組的指針,對于a我們可以做加減整數運算,利用它表示數組中任何數據的值。那么對于指針也可以通過加減整數運算來表示數組中的任何數據。指針變量加上或減區一個整數n表示把指針指向的當前位置向前或向后移動n個位置。具體移動的字節數和指針數組的類型在內存所占的字節數有關系,如果指針數組類型為整型,在內存中占2個字節,那么,指針p+1,實際上的地址值就是原址加2,對于數組元素來說就是指針向后移動一個元素。如int a[10],*p,*s;p=a;s=p+2;其中s的值表示數組中首地址向后移動2個數組元素的位置,表示a[2]對應的地址,而具體移動的字節數則為4個字節。為了表示兩個地址間存在的距離,可以通過指針間的減法實現。指針之間是不能有加法操作的,指針的加減運算只能對數組指針變量進行,對指向其他類型的變量的指針變量做加減運算是毫無意義的。而且兩個指針變量之間的運算只有指向同一數組時它們之間才能進行運算,否則運算將失去意義。

四、結語

C語言是到目前為止學習最多的程序設計語言之一,也是國外大學計算機專業唯一的必修課程。在整個C語言教學中,指針是一個十分重要的部分,也是最難掌握的部分之一。本文從對指針概念的理解、指針在函數和數組的使用等方面系統論述了指針,目的是讓大家清晰地了解指針、掌握指針,從而高效地應用指針。只有掌握好指針,才能充分發揮C語言的優勢。

參考文獻:

[1]譚浩強.C程序設計教程.北京:清華大學出版社,2008,11.

[2]陳剛.C語言程序設計.清華大學出版社,2010,2.

c語言范文2

關鍵詞: C語言 程序設計 教學研究

1.C語言的特點

C語言是計算機軟件開發領域中流行的程序設計語言之一,它使用靈活、功能豐富、表達力強、生成目標程序質量效率高、可移植性好、語法簡潔精妙,很便于描述算法,同時還可以方便直接地控制計算機的底層硬件,使我們能夠深入系統底層進行編程,既可用來編寫系統軟件,也可用來編寫應用軟件,應用范圍很廣。其由于功能強大、效率高、簡潔靈活和可移植性強的特點,在軟件開發領域深受編程人員的喜愛。

C語言由于是理想的結構化語言,同樣適合于程序設計教學,所以成為計算機語言教學的主流語言。通過對C語言的學習,可以使學生掌握基本的編程思想,為學習其他編程語言奠定基礎。C語言掌握的程度,不僅能直接影響到學生對后繼課程的學習,同時對他們以后的學習和發展也起著至關重要的作用。同時,它也是計算機等級考試的主要考試科目。大部分學校采用C語言作為非計算機專業學生計算機等級考試二級語言課程。

2.教學中存在的問題

然而,但從目前的教學情況來看,學生在學習C語言時往往存在著一定的問題,實際掌握的情況并不理想。由于C語言涉及的概念多、規則廣、使用靈活,初學者很難掌握,容易出錯。對于大多數的初學者,C語言靈活的語法結構使他們望而生畏,繁瑣的細節使他們頭暈腦張。同時由于缺乏對計算機結構的全面了解,缺乏對計算機硬件尤其是內存結合很緊密的一些概念,學生基本上很難理解和掌握C語言。

(1)課堂教學中沒有突出語言本身的特色。C語言作為一門高級計算機語言,和其他計算機語言有很多相似甚至相同的地方,對于已經掌握計算機基礎和其他語言的人,就不能再重復這些知識。一些教師對C語言本身的一些特有的概念,尤其指針、鏈表的應用,強調不夠,既浪費了學生課堂上寶貴的時間,又使得學生對新知識理解不深。

(2)沒有充分調動學生學習的積極性。在目前的課堂教學中,還是以教師講授為主,沒有充分發揮學生學習的主動性,啟發式教學沒有得到充分運用。教師不了解學生課前預習的情況,不了解學生的真正需求、難點和問題所在,挫傷了學生學習的積極性和熱情。

(3)對于實踐教學環節重視不夠。C語言是一門實踐性很強的計算機語言,但目前的實踐課教學存在很多弊端。例如:學生不明確上機實驗的目的,實驗的內容不清楚,想干什么就干什么,沒有相應的實驗要求,考核中上機沒有一定的比例。這樣,語言課就成了單一為了考試的一門課,其結果有的學生連最基本的實踐操作也不會做。

3.教學內容及方法的改革

學習程序設計不僅是為了掌握一種開發工具,更重要的是用計算機解決問題。因此在教學過程中,教師應改革傳統的語法學習內容,將算法教學融入到語言教學中,通過實例由淺入深,使學生在解決具體問題的過程中掌握算法的精髓[2]。

在實踐教學過程中,要對《C程序設計語言》教學內容進行調整和整合。首先,對書上的主要內容――I/O格式、控制結構、指針等內容,采用講、練結合的方法讓學生掌握精華部分,對結構體、公用體、文件等內容采用以學生自學為主、答疑為輔的方式讓學生掌握這部分內容。其次,針對學生對語言課程學習的單調性和枯燥特點,采用多種教學方法,并在重點內容的教學上輔以大量的課內習題課和課外練習方式,讓學生牢牢掌握基本內容。再次,讓學生做針對性很強的練習來加強學生的理解。最后,對學生在作業過程中暴露的主要問題集中解決、個別問題單獨解決,以此來彌補個體差異,同時兼顧到大多數學生的利益。

在教學過程中,要堅持“結構化程序設計”原則。所謂結構化程序設計,是組織人的思維,以便在合理的時間里,將計算任務用較容易理解的方式表示出來。結構化程序設計方法的基本思路是,把一個復雜的問題的求解過程分階段進行,每個階段處理的問題都控制在人們容易理解和處理的范圍內。因此,在學生初學程序設計時,這一方法可以養成良好的思維習慣。在教學中,應當向學生強調這樣的幾點:第一,程序質量的優劣首先取決于程序模塊結構的清晰度,要按照一定的標準、一定的原則、一定的風格設計。第二,結構化程序的三種基本結構:順序、分支、循環,它們是構成程序的基本單位。如果在程序中,所有的模塊都只使用這三種單入口、單出口的基本控制結構,那么,不論程序包括多少模塊,也不論一個模塊包含多少個基本控制結構,整個程序仍然能夠顯示清晰的流程,這就實現了程序語言的“結構化”。第三,結構化程序設計的基本方法是自頂向下、逐步細化、模塊化設計、結構化編碼。逐步細化總是和自頂向下結合使用,一般也把逐步細化看作自頂向下的具體表現。

4.加強實驗環節,注重學生動手能力的培養

C程序設計是一門實踐性很強的課程,要把學生在課堂上所學的知識在計算機上用程序設計反映出來,必須加強實驗環節的教學,強化實驗能力和學生的動手能力[3]。為此要做好以下幾點:

(1)編寫符合學生實際情況的實驗講義,注重學生綜合實驗能力的培養。

(2)每一堂實驗課前,檢查學生的實驗預習報告,了解學生的預習情況,并對本次實驗內容提出具體的要求,在實驗課結束前對實驗中存在的問題進行總結。

(3)加強實驗環節注重學生動手能力培養。

在實驗教學過程中注意培養學生的動手能力、獨立科研能力及合作精神,絕不允許“一人動手大家看”這種“放羊式”現象出現。學生在做完實驗后都由教師檢查其結果,打分后方可離開,凡無結果或結果不理想者,必須補做或提供條件讓其重做,促使學生在實驗中勤動手,也使學生們具有成就感。對于部分綜合型的實驗尤其強調分工合作,實行小組長負責制,爭取小組成員一起協調配合完成。

5.改進考核方式

采用書面考試、上機考試、課程設計相結合的方式全面考核。計算機語言課的實踐性決定了它不要求學生死記硬背各種語法規則和語句格式,而是要求學生在解決實際問題的過程中掌握程序設計方法,提高邏輯思維能力。因此,計算機語言課的考核宜采用書面考試與上機考核相結合的方式,輔之以對課程設計情況的考查。書面考試可以側重對基本概念的理解和掌握方面,編程題目的涉及面可以較寬,以考查學生對基礎知識的掌握情況。上機考核可以讓學生在規定時間內對給定的程序設計題目編出程序,并在機上調試通過,題目可以是基礎知識的綜合運用,這樣可以考查學生的綜合應用能力和快速編程能力。課程設計的具體做法可以結合實驗課,將學生分成若干小組,每組布置一個稍大的有實際應用背景的程序設計題目,組內分工各人完成一部分,再由其中一個人負責完成聯合調試任務。通過對課程設計情況的考查,了解學生運用語言解決實際問題的能力和協作編程的能力。

6.結語

以上是本人在C語言教學過程中的幾點體會,現總結出來,謹供各位同行參考,不當之處,敬請指正。教師需要在教學過程中不斷總結,在教學方式、教學方法、課題設計等方面進行探索,為C語言課程建設積累經驗,促進計算機語言教學學科的建設。

參考文獻:

[1]譚浩強.C程序設計[M].北京:清華大學出版社,2001.

c語言范文3

2比喻通俗易懂,具有延伸性列舉實例要通俗易懂,引用生活中的簡單事物闡述C語言復雜的知識點,同時,考慮到知識點的連貫性,比喻對象也需要具有延伸性,方便學生在已有知識的基礎上接受新內容。案例:“數組概念”的講解?!霸诔绦蛟O計中,為了處理方便,把具有相同類型的若干變量按有序的形式組織起來,這些按序排列的同類數據元素的集合稱為數組?!闭Э雌饋砗艹橄?但是如果通過形象比喻,學生就會很清楚。用“客棧房間”作比:當定義了intarray,表示在內存中開辟了10個連續空間,下標從0~9;只能存放int數值。就好比在客棧定下了10個房間,門牌號從0開始一直到9,然后客人依次入住;客人的身份也有一定的要求,只能是int型的客人才能入住。由此,學生掌握了使用數組需要注意的細節。當教師提出array元素是否存在時,學生能夠迅速聯想到號碼為10的房間不存在,由此順利延伸出“越界”的概念。同時通過這個事例,學生對一維數組的理解直觀清晰,在此基礎上加以延伸,使得二維數組講解也取得了比較好的教學效果。

3比喻生動有趣,寓教于樂利用學生感興趣的話題,生動形象地打比方,用幽默的語言,形象的比喻,激發學生學習興趣,讓抽象的代碼變成生動的故事情節,從而達到讓學生熟練編寫代碼的目的。案例:“在有序數組中插入元素”的講解。轉化為陳述《武林外傳》中一個故事情節:同??蜅Y≌乒褚幎?伙計需按年齡由小到大的順序,依次安排房間入住。老白、郭芙蓉、李大嘴、呂秀才已按要求住下多日,現有年齡為20歲的祝無雙到來,要插入其中,想保持原來順序不變,該如何操作?(表2)故事講完了,令學生困擾的代碼結構也搭建完畢,在此基礎上稍加完善,完整的代碼就誕生了。學生在課堂上體現了極大的熱情,以重現故事過程的形式,完成了代碼的編寫,在輕松愉悅的氣氛中掌握了數組的實際應用。

4比喻對象擬人化,突破知識難點C語言編程有很多固定格式和要求,諸多規范貫穿在這門課程當中,顯然死記硬背只會削弱學生的學習熱情。此時,可以把基本規范擬人化,讓每一個規范都變得生動,讓每一段代碼都富有生命。案例:“主函數與非主函數間調用關系”的講解。

5以“公司老板和員工的關系”作比(公司老板—主函數、員工—非主函數):(1)公司的運行,應由老板下達命令;(2)老板可以吩咐員工做事,反之不行;(3)員工之間可以相互幫忙。轉化為函數的概念,即:(1)程序需從main函數開始執行;(2)主函數可以調用非主函數,非主函數不能調用主函數;(3)非主函數之間可以相互調用。利用擬人比喻,學生再也不會把相關概念記混淆,擁有清晰的思路,就能夠編寫出正確的代碼。5比喻深入到應用,激發學習動力通過形象的比喻,把C語言在工作生活中的重要性、實用價值闡述給學生,培養學生學習的主觀能動性。

c語言范文4

關鍵詞:C語言;IT;程序設計語言;優勢

眾所周知,C語言是1972由美國的Dennis Ritchie設計發明的,自今仍是國際上廣泛流行的計算機語言,一般用來寫系統軟件,應用軟件等。例如,Linux,DBASE IV等著名的系統和軟件就是用C語言編寫的。所以,學習C語言還能夠讓初學者深入了解程序底層和操作系統。

1 C語言的特點

首先,C語言的結構簡單,編寫程序效率高,便于描述算法。其次,表達方式靈活實用,語法接近英語,關鍵字如if,else,switch,break等。第三,C語言的數據結構和運算符豐富,共34種運算符,整形,實型,字符型,數組型,指針型,結構體型等數據類型。第四,可移植性好,C語言的設置一般為3-5MB,非常易于安裝和操作。第五,C語言是一種結構化程序設計語言,這種結構使程序調試和維護更加簡單。最后,隨著計算機技術的發展,很多新的程序設計語言都是以C語言為基礎發明的,學習C語言可以更方便的掌握其他Z言。

2 C語言的內容

C語言的內容一般分為:第一,C語言的運算符與運算順序,是學習C語言的基礎。第二,C語言的順序,選擇,循環結構,是C語言的三個基本結構,組成程序最基本的框架。第三,數組,數組就是一個同類型元素的集合。第四,函數,函數是C語言源程序中的基本模塊,一般分為庫函數和用戶定義函數。第五,指針,指針是C語言中廣泛使用的一種數據類型,是C語言的精髓,是檢驗我們是否掌握C語言的標準。第六,結構體與共用體,一般使用結構體存放一組不同類型的數組。第七,文件,C語言中把文件當做一個“流”,并按字節進行處理。

3 C語言的優勢

3.1 C語言在工業控制領域中廣泛使用

大到操作系統,小到網頁瀏覽器,小游戲一般都是由C語言,或與C相關的編程語言編寫。并且,它也是最被人們廣泛使用的可編程嵌入式處理器語言,由它編寫的嵌入式處理器,可以控制汽車,機器,交通燈,玩具以及家用電器,與我們息息相關。因此掌握了C語言,會有諸多實踐創作的同時,還會了解其工作原理。

嵌入式系統是指軟,硬件可以裁剪且適用于應用系統對其功能,成本,體積功耗等有著嚴格要求的專用計算機系統,與單片機相似,依賴于匯編語言編寫的程序。但由于C語言的出現使得嵌入式系統開發變得簡單。由于C語言靈活的語言結構比匯編語言編程更人性化,可以程序與硬件更好的結合,可以忽略一些不必要的細節,從而更專注功能和算法,使控制系統開發變得高效,而且C語言的可移植性和可讀性都比匯編語言好。C語言的結構模塊完善,其良好的程序結構十分適合模塊化的程序設計,因此運用C語言設計控制系統程序時,充分發揮其模塊化程序優勢,將其功能模塊化,不同的模塊完成不同的功能。使得控制系統的結構清晰,也便于調試和維護。所以,C語言在開發嵌入式系統和單片機的效率上提高很多,甚至直接影響了科技的發展。因此,C語言在硬件方便不僅應用廣泛而且扮演著十分重要的角色。

3.2 C語言在軟件工程中的應用

C語言是一種高級語言,能狗直接訪問硬件的物理地址,進行位操作。還有一些匯編語言的特點,可用來編寫系統軟件和開發應用軟件,作為一種通用的程序設計語言,在軟件工程的開發中收到廣泛關注。

由于C語言既有高級語言又有低級語言,兩者有效的結合編程工作單元,和對函數的合理應用,能夠有效提高系統的層次性和清晰度等方面。C語言自身的優勢也很重要,運算符和數據類型十分豐富,可移植性好,方便調試和維護等。對于軟件工程來說,需要C語言編寫程序滿足多元化需求,能夠實現相對復雜的數據運算任務,而C語言具有靈活性和實用性,能夠通過指針對位地址,字節地址進行操作。運用C語言編寫程序,不僅高效而且多種機型和操作系統支持C語言,幫助人們直接訪問地址,及時檢查和提示我們語法錯誤。既保證系統質量高,效率高,又為其更好的移植和修改奠定基礎。同時可以和匯編語言完美結合,在系統編程中能夠進一步發展。另外,C語言還具有強大的圖形功能,不僅支持多種顯示器和驅動器,且計算功能和邏輯判斷功能強大。

3.3 C語言是大多數編程語言的基礎

由于C語言的功能強大,隨著計算機技術的不斷進步,便出現了以C語言為基礎的新的跨平臺的程序設計語言和腳步語言,如我們所熟悉的C++,C#,JAVA,PHP,Python,ObjectiveCC等,都是通過C語言衍生出來的,引用了C語言中大量的語法和功能,借鑒了C語言的優點,這些語言都使用相似的操作符,表達式,控制結構,數組,函數等。幾乎所有的大眾程序設計語言都能與C語言連接,同時也能利用大量的C語言庫。其中,這些語言的許多模板也是由C語言所寫。所以,掌握了C語言不僅可以編寫系統源代碼,也可以使你更有效的學習其他腳本語言或程序設計語言。

4 結語

雖然C語言是在20世紀90年明的,但是在今天,它的應用范圍依舊廣泛,無論是軟件開發還是硬件處理器的編程,它的地位依然重要。C語言不僅是現代信息技術和計算機科學的基礎,還是大學最常用的程序設計語言之一,C語言對計算機的基本工作原理和軟件開發都有詳細說明,我們也可以通過學習C語言去更加深入地了解到編程的原理,掌握C語言還能為你對其他程序設計語言的學習打下基礎。因此,C語言的重要性極其存在價值,不只是它的歷史久遠,還有它的經典和實踐中的作用。所以作為有創新意識的新型人才,一定要認識到C語言的重要性,并且在實踐中熟練運用。

參考文獻:

[1] 趙黎,范君君. C語言編程技巧在C語言學習中的應用研究[J].信息與電腦(理論版),2014(09):252.

c語言范文5

關鍵詞:C語言;指針;數組;地址

地址:在計算機中,所有的數據都是存放在存儲器中的。一般把存儲器中的一個字節稱為一個內存單元,不同的數據類型所占用的內存單元數不等,如整型量占2個單元,字符量占1個單元等,在前面已有詳細的介紹。為了正確地訪問這些內存單元,必須為每個內存單元編上號。根據一個內存單元的編號即可準確地找到該內存單元。內存單元的編號也叫做地址。嚴格地說,一個指針是一個地址,是一個常量。而一個指針變量卻可以被賦予不同的指針值,是變量。但常把指針變量簡稱為指針。為了避免混淆,我們中約定:“指針”是指地址,是常量,“指針變量”是指取值為地址的變量。定義指針的目的是為了通過指針去訪問內存單元,在C語言中,一種數據類型或數據結構往往都占有一組連續的內存單元。用“地址”這個概念并不能很好地描述一種數據類型或數據結構,而“指針”雖然實際上也是一個地址,但它卻是一個數據結構的首地址,它是“指向”一個數據結構的,因而概念更為清楚,表示更為明確。這也是引入“指針”概念的一個重要原因。因為數組或函數都是連續存放的。通過訪問指針變量取得了數組或函數的首地址,也就找到了該數組或函數。這樣一來,凡是出現數組,函數的地方都可以用一個指針變量來表示,只要該指針變量中賦予數組或函數的首地址即可。這樣做,將會使程序的概念十分清楚,程序本身也精練,高效。

1 指針

所謂的指針,本質上就是地址。指針變量的值,就是地址的值,當取值運算時就是到對應的內存地址上,依照指針類型進行取值。指針是一個地址,指向的是個類型:我們知道,c語言中的類型有int,char,bool(這個不常用),一般我們使用int,char就可以滿足一般的類型需求的,如果對于變量的長度過大,就是用long,float,double,關于各個類型使用的長度問題,可以使用sizeof(int)或者sizeof(long)來查看各個類型,在系統中的小。

而指針就是一個8個字節(64系統)。在C語言中,允許用一個變量來存放指針,這種變量稱為指針變量。因此,一個指針變量的值就是某個內存單元的地址或稱為某內存單元的指針。圖中,設有字符變量C,其內容為“K”(ASCII碼為十進制數75),C占用了011A號單元(地址用十六進數表示)。設有指針變量P,內容為011A,這種情況我們稱為P指向變量C,或說P是指向變量C的指針。嚴格地說,一個指針是一個地址,是一個常量。而一個指針變量卻可以被賦予不同的指針值,是變量。但常把指針變量簡稱為指針。為了避免混淆,我們中約定:“指針”是指地址,是常量,“指針變量”是指取值為地址的變量。定義指針的目的是為了通過指針去訪問內存單元。

指針指向的是地址,地址指向的是內容:

我們需要一個變量,來存儲地址,這個變量的值是地址,但是我們可以通過修改變量的值,來不斷地改變地址,但是,我們如果需要改變該個地址的值的話,就需要,對地址的值進行修改,而不改變地址。

inta=10;

int*p;

p=&a;

*p=11;

a=?

這里我們看到,p是一個變量,我們使用p來存儲變量a的地址,這是,我們使用*p對于這個變量進行賦值,那么a的值最后,是多少呢,結果是11,因為我們使用*p賦值,就相當于a=11,賦值效果一樣的。

指針的指針,是面對于指針的變量:

我們說,指針的指針的時候,就有點不清楚了,到底怎么區分指針和指針的指針呢?

char*p;

char**pr;

pr=&p;

我們這樣看就清楚了一點,char*(*pr);*pr是一個存儲的值為指針的變量,pr就是存儲上個變量地址的變量。整合起來就是,pr是一個存儲的值為指針的地址的變量。這樣,我們就基本,對于指針有一個直接的了解了。既然根據內存單元的編號或地址就可以找到所需的內存單元,所以通常也把這個地址稱為指針。內存單元的指針和內存單元的內容是兩個不同的概念。

2 指針的類型指針的類型

從語法的角度看,你只要把指針聲明語句里的指針名字去掉,剩下的部分就是這個指針的類型。這是指針本身所具有的類型。讓我們看看例一中各個指針的類型:

第一,int*ptr;//指針的類型是int*。

第二,char*ptr;//指針的類型是char*。

第三,int**ptr;//指針的類型是int**。

第四,int(*ptr)[3];//指針的類型是int(*)[3]。

第五,int*(*ptr)[4];//指針的類型是int*(*)[4]。

3 指針指向的類型

從語法上看,你只須把指針聲明語句中的指針名字和名字左邊的指針聲明符*去掉,剩下的就是指針所指向的類型。例如:

第一,int*ptr;//指針所指向的類型是int。

第二,char*ptr;//指針所指向的類型是char。

第三,int**ptr;//指針所指向的類型是int*。

第四,int(*ptr)[3];//指針所指向的類型是int()[3]。

第五,int*(*ptr)[4];//指針所指向的類型是int*()[4]。

4 指針變量與變量指針

常量指針:該指針是一個常量,不可改變,指向某個地址之后就不能改變了,但他所指向的單元是可以改變的,很容易與指針常量弄混,所以一般讀的時候讀成常量指向,從字面上看就是一個常量指向某個地址。指針常量說明該指針所指向的是內容不可改變,但其自身是一個變量,可以改變指向的內容,讀的時候讀成指向常量,從字面上看就是指向某個常量。

5 C語言指針的作用

指針可以直接操作內存,理解為直接操作內存的優點有哪些。

第一,效率更高,這個很容易理解,直接操作內存,效率必然更高。

第二,可以寫復雜度更高的數據結構,這個也好理解,程序員可以操作內存,當然可以寫出靈活、復雜的數據結構。

第三,編寫出簡潔、緊湊、高效的程序。

6 結語

C語言是一種面向過程的程學設計語言,在代碼量超過一定大額數額后程序設計的效率會明顯下降,這是它相對于其他的面向對象的程序設計語言的缺點,但是它的優點是可以比其他的語言更加的接近于硬件底層,這種特性直接導致它可以用來設計計算機操作系統,Unix就是它的產物!所以說C語言有著其他的語言不可替代的功能,既有缺點,也有優點。

參考文獻:

[1] 梁馮蘭.對C語言中指針的探討[J].和田師范??茖W校學報,2006,26(5).

[2] 許晶. C語言中指針運用與探索[J].中國科教創新導刊,2013(23).

作者簡介:李帥(1997―),男,湖南衡陽人,沈陽理工大學學生。

c語言范文6

Abstract: The pointer is the essence, focus and difficult of C language which is also the basis of C language Series. This article describes the arithmetic rules of pointer constants and variables in C language, as well as the access to the address.

關鍵詞: 指針;地址;數組;運算

Key words: pointer;address;array;operation

中圖分類號:TP312 文獻標識碼:A 文章編號:1006-4311(2014)11-0214-02

1 緒論

C語言的精華是指針,程序設計的關鍵也是指針,使用指針的難點是指針的運算。用指針訪問數組元素,相對比較抽象,故本文用簡單的自然語言予以淺析。

2 指針變量的概念

2.1 內存地址:內存中存儲單元的編號 內存中,有眾多的存儲單元(單位:字節)。為了區分不同單元,必須為每一個單元編號,這個編號就是存儲單元的“地址”,就像電話很多,為了區分每一部電話,必須為其編號,該編號就是電話號碼。每個單元有且僅有一個惟一的地址。單元中存放數據,注意區分單元的地址與單元中的內容(數據)。

2.2 變量地址:該變量在內存中的起始地址 變量名是單元的外部名字(用戶命名),單元號是單元的內部名字(系統命名)如 int x 假設整型變量是2個字節,系統分配的存儲單元為 100 和101,則首地址100就是變量x在內存中的地址。

直接訪問──直接利用變量的地址進行存取。

如:把“書”送給“張偉”就是直接訪問。

間接訪問──通過另一變量訪問該變量的值。

如:把“書”送給“張偉他哥”就是間接訪問,先間訪“張偉”,知道他哥的地址,再按此地址送“書”。

2.3 指針變量

指針:即地址,存放地址的變量稱為指針變量。

指針變量定義格式:數據類型 *指針變量[, *指針變量2……];

取地址運算的格式: &變量

例如

main()

{int x,*p; /*整形的指針的p單元

P=&x;

X=10;

*p+=20;

Printf(“%d,%d\n”,x,*p);

} 程序運行結果是30,30

3 數組的指針和指向數組的指針變量

3.1 數組的指針 數組元素在內存中連續存放,數組名代表數組首地址,是一個地址常量。

3.2 指向數組的指針變量的定義

例如,int a[10], *p=a(或&a[0]);

或者:int a[10], *p;p=a;

3.3 數組元素的引用

3.3.1 按名存取 有 int a[10],*p=a;定義,則p=a,一個數組,兩個名字p和a,訪問元素時用a[i]或p[i]。

3.3.2 按地址存取 有 int a[10],*p=a;定義,則:p+i和a+i都是數組元素a[i]的地址,訪問元素時用*(p+i)和*(a+i)。按地址存取:*(p+i),*(a+i),按名存?。篴[i],p[i]四個是等價關系。

注意:①p+n指向數組的下n個元素,而不是簡單地使指針變量p的值+n。編譯時為p+n*m。m為一個元素占用的字節數。②指針變量:既然是變量,其值隨時在變,必須注意其當前值,否則容易出錯。③指向數組的指針變量,可以指向數組以后的任何內存單元,C語言不做越界檢查,這些單元不是系統分配的單元,強占資源,易導致死機。④int a[10],*p=a;p++對,a++錯,a常量,p變量。

3.3.3 指向數組的指針變量所支持的運算 地址加減數值等于新地址,除此以外運算沒有意義,由此得出推論,指針支持的運算有:

算術運算:指針變量±整形數據、指針變量-指針變量=整型數值,該數值表示兩指針之間的數據個數,并非地址之差。

關系運算:指針變量 關系運算符 指針變量,表示兩個變量值的大小關系,誰在前誰在后。

4 二維數組的指針及其指針變量

4.1 二維數組的指針 有定義語句: int a[3][4];

①從二維數組角度看,數組名a代表數組的起始地址, 是一個以行為單位進行控制的行指針,由一維數組構成的一維數組就是二維數組,a+i是行指針值,指向二維數組的第i行。*(a+i)是列指針值,指向第i行第0列。*(*(a+i)):數組元素a[i][0]的值。用a作指針訪問數組元素a[i][j]的格式:*(*(a+i)+j)。②int a[3][4],b[4];由定義可看出,a[i]相當于數組名b,故a[0]、a[1]、a[2]分別表示第0、1、2一維數組的名字。③賦值:行指針變量=二維數組名或行指針變量。

4.2 行指針變量定義格式 數據類型 (*指針變量)[n];

4.3 二維數組元素的訪問 int a[5][4],(*P)[4]=a;和int b[4],可以看出,b相當于a[5],第i行的一維數組名是a[i],元素地址±數值=元素地址,行地址±數值=行地址,a+i,a[i],*(a+i)其值相等,但a+i是行地址,a[i],*(a+i) 是元素地址。

①按名存?。篴[i][j]或p[i][j]

②按地址存取:(*a[i]+j), *(*(a+i)+j), (*p[i]+j), *(*(p+i)+j)

5 動態數組的實現

靜態數組:編譯階段確定數組的大小,運行階段不能改變數組大小。缺點是事先無法準確確定數組的大小,太小不滿足處理需要,太大浪費內存空間。

動態數組:運行階段,根據實際需要動態確定數組的大小。

在C語言中,可利用內存的申請和釋放庫函數,以及指向數組的指針變量可當數組名使用的特點,來實現動態數組。如下程序

#include “alloc.h”

#include “stdlib.h”

main()

{ int *p=NULL, count, i,*q;

scanf(“%d”, &count);

p=(int *)malloc( sizeof(int) * count ); /*申請動態數組使用的內存塊*/

if ( p==NULL ) exit(0);

for (i=0; i

for (q=p+ count-1; q>=p; q++) printf(“%d,”, *q); /*倒序顯示*/

free(p); /*釋放由malloc()函數申請的內存塊*/

} 程序功能是鍵入任意個數據,倒序顯示。

5.1 庫函數malloc()

①用法:void *malloc(unsigned size)。②功能:在內存的動態存儲區分配size個字節的連續空間。③返回值:申請成功,則返回新分配內存塊的起始地址;否則,返回NULL。

malloc()函數的返回值是一個無類型指針,但在實際使用malloc()函數時,必須將其返回值強制轉換成被賦值指針變量的數據類型,否則出錯。

5.2 運算符sizeof

①格式:sizeof(變量名/類型名)。②功能:求變量/類型占用的內存字節數。如sizeof(long)=4。

5.3 庫函數free()

①用法:void free(void *ptr)。②功能:釋放由ptr指向的內存塊(ptr是調用malloc() 函數的返回值)。③返回值:無。

一般情況下,使用malloc()函數申請的內存塊,操作結束后,應及時使用free()函數予以釋放。特別是在循環使用malloc()函數申請時,如果不及時釋放不再使用的內存塊,很可能很快就耗盡系統的內存資源,從而導致程序無法繼續運行甚至死機。

6 結束語

學習C語言必須掌握指針的概念,以便為以后C系列語言學習打下基礎。

參考文獻:

[1]譚浩強.C語言程序設計[M].清華大學出版社,2004.

亚洲精品一二三区-久久