




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
指針及其應(yīng)用關(guān)于指針的考點(12—24分):?指針與指針變量的概念、指針與地址運算符。?變量、數(shù)組、字符串、函數(shù)、結(jié)構(gòu)體的指針以及指向變量、數(shù)組、字符串、函數(shù)、結(jié)構(gòu)體的指針變量,通過指針引用以上各類型數(shù)據(jù)。?用指針作函數(shù)參數(shù)。?返回指針值的指針函數(shù)。?指針數(shù)組、指向指針的指針。?main函數(shù)的命令行參數(shù)。知識點歸納:指針與指針變量的概念。指針:就是內(nèi)存中的一個存儲單元的地址,即內(nèi)存單元的編號。指針變量:是一個能存放地址值的變量。通過它存放的地址值能間接訪問它所指向的變量。指針變量的定義。類型名*指針變量名類型說明中可取。語言的有效類型,*表示為指針型變量。如:char*c1,*c2;表示。1與c2是指針變量,其基類型是字符型。注意:指針的基類型與其所指向的變量的類型要統(tǒng)一。指針變量的使用方法使指針變量指向某個變量,(即將某變量的地址值賦給指針變量)例:intx;int*p=&x;或intx,*p;p=&x;用間址運算(運算符為*)訪問所指變量,例:*p=5;//用作左值時代表所指的變量x=*p+9;〃用作右值時代表所指變量的值注意:指針變量在使用之前一定要指向某變量,而不能用常數(shù)宜接賦值指針運算的優(yōu)先級與結(jié)合性(主要涉及*、&、++、--)。單目運算符優(yōu)先級是相同的,但從右向左結(jié)合重點理解:*&a等同于a;&*p等同于&a。*p++等同于*(p++)*++p等同于*(++p)(*p)++與*(p++)的區(qū)別。(*p)++是變量值增值,相當于a++;而*(p++)則是用完當前值后,指針值增值,即相當于a,p++,是指向了新的地址。指針與一維數(shù)組(整型數(shù)組)數(shù)組的地址:即數(shù)組中首個元素a[0]的地址數(shù)組地址的表示方法:(1)用數(shù)組名a,(2)取首元素的地址,即&a[0]數(shù)組指針:指向數(shù)組的指針變量的簡稱,即指針變量中存放的是某數(shù)組的首地址。例,若有inta[10],*p;p=&a;則可稱?為a數(shù)組的指針,或稱p指向數(shù)組a。指針與數(shù)組的關(guān)系:通過移動指針使其指向不同的數(shù)組元素p,(p+1),(p+2),…,(p+9)等同于&a[0],&a[1],&a[2],…,&a[9]。*p,*(p+1),*(p+2),…,*(p+9)等同于a[0],a[1],a[2],…,a[9]。總結(jié):一維數(shù)組元素的合法引用方式方式一,數(shù)組名[下標],例如a[0],a[1],…方式二指針名[下標],例如p[0],p[1],???方式三,*(指針名+下標),例如*p,*(p+0),*(p+1),…方式四,*(數(shù)組名+下標),例如*a,*(a+0),*(a+1),…(在C中,數(shù)組名就是第一個元素的地址,因此對數(shù)組的引用可以直接用*a表示a[0],用*(a+1)表示a[1],用*(a+2)表示a[2],…,用*(a+9)表示a[9]。)數(shù)組名或數(shù)組指針作函數(shù)參數(shù)屬于數(shù)組、指針、函數(shù)的綜合應(yīng)用,注意函數(shù)調(diào)用時傳值和傳址的區(qū)別:形參為普通變量時是傳值調(diào)用形參為指針變量時是傳址調(diào)用例1:傳值調(diào)用(形參為普通變量,調(diào)用后形參不會影響實參)#include<stdio.h>voidfun(inta,intb){a++;b++;}voidmain(){intx=3,y=4,z;fun(x,y);printf("%d,%d\n”,x,y);}例2:傳址調(diào)用(形參為指針,調(diào)用后形參值影響實參)#include<stdio.h>voidfun(int*a,int*b){(*a)++;(*b)++;}voidmain(){intx=3,y=4,z;fun(&x,&y);printf("%d,%d\n”,x,y);}例3傳址調(diào)用(形參為指針,可利用此類形參返回多個結(jié)果)#include<stdio.h>voidfun(inta,intb,int*c,int*d){*c=a+b;*d=a*b;}voidmain(){intx=3,y=4,k,j;fun(x,y,&z,&j);printf("%d,%d\n”,k,j);}例4傳址調(diào)用(形參為數(shù)組名)#include<stdio.h>voidfun(intb[],inti){b[i]=0;}voidmain(){inta[10]={0,1,2,3,4,5,6,7,8,9},i;fun(a,5);for(i=0;i<10;i++)printf("%d",a[i]);}指針與一維數(shù)組(字符數(shù)組)7.指針與一維數(shù)組(字符數(shù)組)用指針方式與用字符數(shù)組方式操作字符串的區(qū)別:(1)存儲方式不同。字符數(shù)組由若干個元素組成,每個元素中放一個字符,而字符指針變量中存放的是地址(字符串首個字符的地址),決不是將字符串放到字符指針變量中。賦值方式不同。對字符數(shù)組只能對各個元素賦值,不能用以下辦法對字符數(shù)組賦值。charstr[20];str="Goodluck!";而對字符指針變量,可以采用下面方法賦值:char*str;str="Goodluck!";賦給str的不是字符,而是字符串第一個元素的地址。輸入方式不同。對字符數(shù)組可用如下方式賦值:charstr[20];scanf("%s”,str);//ok但對字符指針變量則不建議用此方式,因為會發(fā)生指針的異常指向,正確做法為:char*str,a[20];str=a;//使指針有明確的指向scanf("%s”,str);字符指針變量的值是可以改變的,而字符數(shù)組名的值是不可以改變的。例1:#include<stdio.h>voidmain(){char*str="Goodluck!";puts(str);str+=5;//okputs(str);}例2:#include<stdio.h>voidmain(){charstr[20]="Goodluck!";puts(str);str+=5;//error!puts(str);}指針與二維數(shù)組(整型、字符型)二維數(shù)組的按行存儲若有inta[2][3]={{1,2,3},{4,5,6}},*p=a;則*(p+4)=a[1][1]=5二維數(shù)組元素的地址表示及訪問方式設(shè)inta[2][3],*p;p=&a;可見a是2X3的數(shù)組,含有6個元素。可認為a有兩個元素:a[0]和a[1];而a[0]與a[1]又分別是具有三個元素的一維數(shù)組。aa[0]所含元素為:a[0][0],a[0][1],a[0][2]a[1]所含元素為:a[1][0],a[1][1],a[1][2](可以記憶為:二維數(shù)組a含有二個行元素,每個行元素又含有3個列元素)因此對于二維數(shù)組a,a[0]即&a[0][0],也就是第0行的首地址°a[1]就是&a[1][0],也就是第一行的首地址。由地址運算規(guī)則,a[0]+0就是&a[0][0],a[0]+1就是&a[0][1],a[0]+2就是&a[0][2]。所以一般地:a[i]+j=&a[i][j].在二維數(shù)組中,可以用指針表示數(shù)組元素的地址,如:a[i]+j=&a[i][j]也可寫為*(a+i)+j=&a[i][j],從而可知,*(*(a+i)+j)就是a[i][j],即a[i][j]=*(*(a+i)+j)。8.函數(shù)與指針指針作為函數(shù)參數(shù)(知識點6)函數(shù)的返回值為指針類型定義方式為:類型*函數(shù)名();例:#include<stdio.h>intz;int*fun(intx,inty){z=x+y;return&z;}voidmain(){inta=3,b=4;int*c;c=fun(a,b);printf("%d\n”,*c);(3)指向函數(shù)的指針變量定義方式為:類型(*變量名)();這里變量名前一個*號,說明該變量是指針變量,而后面有括號說明這個指針變量是指向函數(shù)的。如:int(*p1)();說明p1是指針變量,這個指針變量是指向函數(shù)的。指針數(shù)組與指向一維數(shù)組的指針變量(1)指針數(shù)組:一個數(shù)組,它的元素都為指針類型定義方式為:類型說明*數(shù)組名[整型常量表達式]如:char*s[4];則定義了一個指針數(shù)組,即s[0],s[1],s[2],s[3]均用來存放地址值,主要用于處理多個字符串。(2)指向一維數(shù)組的指針:一個指針,指向一個一維數(shù)組定義形式是:類型說明(*變量)[整型常量表達式]如:int(*p)[4];定義p為指針變量,它指向的是一個具有四個元素的一維數(shù)組。指向指針的指針指向指針的指針也就是“二級指針”。定義方式如下:類型說明**指針變量名即定義一個二級指針變量,類型說明是它指向的指針變量所指向的變量的數(shù)據(jù)類型。它所指向的指針變量稱為一級指針變量。賦值形式為:二級指針變量=&一級指針變量;這類似于張三有李四的地址,而王五有張三的地址,這樣王五通過張三找到李四。這樣張三是一級指針,而王五是二級指針。例如:#include<stdio.h>voidmain()(char*name□={"Followme","BASIC","GreatWall","FORTRAN","Computerdesign"};char**p;inti;for(i=0;i<5;i++){p=name+i;printf("%s\n",*p);}}10.指針數(shù)組作main函數(shù)的形參指針數(shù)組的一個重要應(yīng)用是作為main函數(shù)的形參。在以往的程序中,main函數(shù)的第一行一般寫成以下形式:voidmain()然而,main函數(shù)可以有參數(shù),例如:voidmain(intargc,char*argv[])argc和argv就是main函數(shù)的形參main函數(shù)是由操作系統(tǒng)調(diào)用的。實際上實參是和命令一起給出的。也就是在一個命令行中包括命令名和需要傳給main函數(shù)的參數(shù)。命令行的一般形式為:命令名參數(shù)1參數(shù)2參數(shù)口如果有一個名為filel的文件,它包含以下的main函數(shù):voidmain(intargc,char*argv[]){while(argc>1){++argv;printf("%s\n”,argv);argc;}}在DOS命令狀態(tài)下輸入的命令行為:filelChinaBeijing則執(zhí)行以上命令行將會輸出以下信息:ChinaBeijing11.有關(guān)指針的數(shù)據(jù)類型的小結(jié)定義含義inti;定義
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- ABB變頻器培訓教程
- 提升綜合能力2024年體育經(jīng)紀人試題及答案
- 2025版商業(yè)店鋪交易合同樣本
- 大數(shù)據(jù)數(shù)據(jù)生命周期管理重點基礎(chǔ)知識點
- 2024年游泳救生員考試的復(fù)習類試題及答案
- 2024年籃球裁判員質(zhì)量標準試題及答案
- 模具裝配實操試題及答案
- 項目綜合管理的試題及答案
- 模具設(shè)計師應(yīng)知應(yīng)會試題及答案
- 模具設(shè)計師資格考試切合實際試題及答案
- 混凝土模板支撐工程專項施工方案(140頁)
- 羽毛球教案36課時
- 第三章煤層氣的儲層壓力及賦存狀態(tài)
- 六年級上冊數(shù)學圓中方方中圓經(jīng)典題練習
- 住宅(小區(qū))智能化系統(tǒng)檢測報告
- ansys教學算例集汽輪機內(nèi)蒸汽平衡態(tài)與非平衡態(tài)仿真分析
- 安全管理機構(gòu)架構(gòu)
- 國際海上人命安全公約(SOLAS)介紹
- 自卸車生產(chǎn)過程檢驗表
- 辭退公務(wù)員審批表辭退國家公務(wù)員審批表
- 纏論纏中說禪秋葉正紅三級聯(lián)立分析報告操作系統(tǒng)
評論
0/150
提交評論