




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
C語言程序設計基礎與實踐模塊四編程高級應用任務4.2指針C語言程序設計基礎與實踐課程組04技能點拓展03技能點詳解02技能點分析目錄CONTENTS任務4.2指針01問題引入05技能點檢測一問題引入現實生活中,我們總會碰到很多指示牌,它們的作用是告訴尋路者要找到一個地方應該怎么走,以便我們找到自己的目的地或者所需的東西,比如車站出口、物品擺放地等等。在程序設計中,有時也需要“指示牌”,告訴程序所需要的數據、代碼在哪,以便于更好的調用數據、代碼。那么指針在使用時我們應該注意哪些事項呢?04技能點拓展03技能點詳解02技能點分析目錄CONTENTS01問題引入05技能點檢測任務4.2指針二技能點分析1.指針概念2.指針運算3.指針與數組學習目標1.什么是指針?2.如何聲明指針?3.指針的算術運算有哪些?4.什么是指針數字?如何定義一維指針數組?學期預習04技能點拓展03技能點詳解02技能點分析目錄CONTENTS01問題引入05技能點檢測任務4.2指針指針也就是內存地址,指針變量是用來存放內存地址的變量。就像其他變量或常量一樣,您必須在使用指針存儲其他變量地址之前,對其進行聲明。指針變量聲明的一般形式為:type*v_name;type是指針的基類型,它必須是一個有效的C數據類型,v_name是指針變量的名稱。用來聲明指針的星號*與乘法中使用的星號是相同的。但是,在這個語句中,星號是用來指定一個變量是指針。int*intp;/*一個整型的指針*/double*doup;/*一個double型的指針*/float*flop;/*一個浮點型的指針*/char*chp;/*一個字符型的指針*/三技能點詳解——指針不同數據類型的指針之間唯一的不同是,指針所指向的變量或常量的數據類型不同。例如一個int型變量inta:編譯器會根據變量inta的類型int,為其分配4個字節地址連續的存儲空間。假如這塊連續空間的首地址為0x0048EFAA,那么這個變量占據0x0048EFAA~0x0048EFAD這四個字節的空間,0x0048EFAA就是變量inta的地址。三技能點詳解——指針三技能點詳解——1指針的算術運算1)取址運算符在程序中定義變量時系統會為變量在內存中開辟一段空間,用于存儲該變量的值,每個變量的存儲空間都有唯一的編號,這個編號就是變量的內存地址。C語言支持以取址運算符“&”獲得變量的地址。&符號的使用方法:&vary_name;intinta=99;//定義變量intaint*intp=&inta;//定義int類型的指針intp,并取變量inta的地址賦值給intp三技能點詳解——1指針的算術運算2)取值運算符指針變量存儲的數值是一個地址,直接對地址操作容易出錯,針對指針變量的取值并非取出它所存儲的地址,而是間接取得該地址中存儲的值。C語言支持通過使用一元運算符*來返回位于操作數所指定地址的變量的值。*符號使用方法:*指針表達式。案例如下:通過上述代碼,最終實現變量intb的值也是99。其效果等同于intb=inta。intinta=99;//定義變量intaint*intp=&inta;//定義int類型的指針intp,并取變量inta的地址賦值給intpintintb=*intp;//定義int型變量intb,并取指針變量p中存儲的變量值賦給intb三技能點詳解——1指針的算術運算3)指針的算術運算C指針是一個用數值表示的地址。因此,您可以對指針執行算術運算。可以對指針進行四種算術運算:++、--、+、-。指針的每一次遞增,它其實會指向下一個元素的存儲單元。指針的每一次遞減,它都會指向前一個元素的存儲單元。指針在遞增和遞減時跳躍的字節數取決于指針所指向變量數據類型長度,比如int型就是4個字節,char型就移動1個字節。3)指針的比較指針可以用關系運算符進行比較,如==、<和>。如果intp1和intp2指向兩個相關的變量,比如同一個數組中的不同元素,則可對intp1和intp2進行大小比較。三技能點詳解——1指針的算術運算1)指針與一維數組定義了指向數組的指針,則指針可以像使用數組名一樣,使用下標取值法對數組中的元素進行訪問,指針還可以通過“*”符號訪問數組元素,還可以直接移動指針訪問數組中的數據。三技能點詳解——2指針與數組charcha1[6]="hello";//定義一個字符數組,長度為6,hello后還要有一個/0字符char*chp,t; //定義一個chp字符指針和字符型變量tchp=cha1; //將數組地址賦值給指針chpt=chp[4]; //通過下標訪問字符數組中的’o’字符,賦值給字符變量tt=*(p+4)//不移動指針,通過指針運算訪問數組元素’o’字符
/***************************************移動指針,通過指針p+4后指向數組元素’o’字符,*然后通過*取值運算符訪問字符****************************************/p=p+4;t=*p;2)指針與二維數組在二維數組arr中,arr[0]就表示第一行數據,arr[1]表示第二行數據。arr[0]、arr[1]相當于二維數組中一維數組的數組名,指向二維數組對應行的第一個元素,arr[0]=&arr[0][0],arr[1]=&arr[1][0]。在二維數組中,arr+i雖然指向的是該行元素的首地址,但它代表的是整行數據元素,只是一個地址,并不表示某一元素的值。*(arr+i)仍然表示一個地址,與arr[i]等價。*(arr+i)+j表示二維數組元素arr[i][j]的地址,等價于&arr[i][j],也等價于arr[i]+j。三技能點詳解——2指針與數組通過ptr訪問二維數組arr中的第2行第2列的元素:ptr[1][1]*(ptr[1]+1)*(*(ptr+1)+1)案例4.1.1一維數組指針/*******************************************內容簡述:在程序中經常看到使用指針代替數組,*因為變量指針可以遞增,而數組不能遞增,數組*可以看成一個指針常量。下面的程序遞增變量指*針,以便順序訪問數組中的每一個元素******************************************/#include
<stdio.h>intmain(){
intarr[]={100,200,300};
inti,*ptr;ptr=arr; /*指針中的數組地址*/
for(i=0;i<3;i++){printf("地址值:arr[%d]=%p\n",i,ptr);printf("存儲值:arr[%d]=%d\n",i,*ptr);ptr++; /*通過自增運算讓指針指向下一個位置*/}
return0;}三技能點詳解——案例實例4.1.2二維數組指針通過指針數組p和一維數組a構成一個3×2的二維數組,并為a數組賦初值2、4、6、8、…。要求先按行的順序輸出此“二維數組”,然后再按列的順序輸出它。/****************************************內容簡述:利用數組指針訪問二維數組**************************************/#include
<stdio.h>intmain(){inti,j,a[3][2]={2,4,6,8,10,12},*p[3];//定義一個指針數組*p[]
for(i=0;i<3;i++) p[i]=a[i];//利用指針p[i]獲取每行數組a[i]的地址
for(i=0;i<3;i++){for(j=0;j<2;j++) printf("%4d",p[i][j]);printf("\n");}
for(i=0;i<2;i++){for(j=0;j<3;j++)
printf("%4d",p[j][i]);printf("\n");}}三技能點詳解——案例04技能點拓展03技能點詳解02技能點分析目錄CONTENTS01問題引入05技能點檢測任務4.2指針四技能點拓展——1NULL指針在變量聲明的時候,如果沒有確切的地址可以賦值,為指針變量賦一個NULL值是一個良好的編程習慣。賦為NULL值的指針被稱為空指針。NULL指針是一個定義在標準庫中的值為零的常量。在大多數的操作系統上,程序不允許訪問地址為0的內存,因為該內存是操作系統保留的。然而,內存地址0有特別重要的意義,它表明該指針不指向一個可訪問的內存位置。但按照慣例,如果指針包含空值(零值),則假定它不指向任何東西。如需檢查一個空指針,您可以使用if語句,如下所示:if(ptr)/*如果ptr非空,則完成后續操作*/if(!ptr)/*如果ptr為空,則完成后續操作*/四技能點拓展——2指向指針的指針指向指針的指針是一種多級間接尋址的形式,或者說是一個指針鏈。通常,一個指針包含一個變量的地址。當我們定義一個指向指針的指針時,第一個指針包含了第二個指針的地址,第二個指針指向包含實際值的位置。一個指向指針的指針變量必須如下聲明,即在變量名前放置兩個星號。例如,下面聲明了一個指向int類型指針的指針:int**vptr;四技能點拓展——3
無類型指針使用void*修飾的指針。無類型指針指向一塊內存,但其類型不定,程序無法根據這種定義確定為該指針指向的變量分配多少存儲空間,所以若要使用該指針為其他基類指針賦值,必須先轉換成其他類型的指針。void *p1=NULL,*q1;//定義一個無類型的指針變量int *m1=(int*)p1;//將無類型的指針變量p強制轉換為int*型再賦值四技能點拓展——3
案例1
/****************************************在程序中經常看到使用指針代替數組,因為變量*指針可以遞增,而數組不能遞增,數組可以看成*一個指針常量。下面的程序遞增變量指針,以便*順序訪問數組中的每一個元素***************************************/#include
<stdio.h>intmain(){
intarr[]={100,200,300};
inti,*ptr;ptr=arr; /*指針中的數組地址*/
for(i=0;i<3;i++){printf("地址值:arr[%d]=%p\n",i,ptr);printf("存儲值:arr[%d]=%d\n",i,*ptr);ptr++; /*通過自增運算讓指針指向下一個位置*/}
return0;}四技能點拓展——3
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年云南省自然資源廳下屬事業單位真題
- 2024年蘇州城市學院輔導員考試真題
- 班級行為規范的建立與實施計劃
- 2024年寧波財經學院輔導員考試真題
- 2024年江西省廣播電視局下屬事業單位真題
- 公司并購與風險管理試題及答案
- 2024年四川文理學院選調工作人員筆試真題
- 2024年三明市尤溪縣招聘教師筆試真題
- 戰略管理中的外部性風險識別與應對方法試題及答案
- 2024年佛山市南海區事業單位招聘筆試真題
- 科學小實驗手搖發電機原理
- 中華民族共同體概論課件專家版10第十講 中外會通與中華民族鞏固壯大(明朝時期)
- 臨建施工方案
- MOOC 國際金融學-湖南大學 中國大學慕課答案
- 膽管癌化療方案指南
- 籃球比賽記錄表
- 庭院造園行業分析
- 保險理賠賠償協議書
- 國企應聘簡歷模板
- 華為受到美國制裁及應對
- 科學睡眠指導手冊
評論
0/150
提交評論