版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
指針《計(jì)算機(jī)軟件基礎(chǔ)》01.指向變量的指針02.指向數(shù)組的指針03.字符指針主要內(nèi)容04.指針數(shù)組05.返回指針值的函數(shù)本章重點(diǎn)難點(diǎn)本章重點(diǎn):指針變量的定義、初始化和賦值;利用指向變量、一維數(shù)組和字符串的指針變量來(lái)正確引用所指元素;各類指針變量的正確運(yùn)用;返回指針值的函數(shù)的正確使用。本章難點(diǎn):各類指針變量的正確運(yùn)用;返回指針值的函數(shù)的正確使用。01指向變量的指針1.變量的內(nèi)存地址C語(yǔ)言中訪問(wèn)變量值的方式有兩種:1)直接存取方式:通過(guò)按變量的地址(即變量名)存取變量值的方式。例:scanf(“%d”,&x);
x=sqrt(x);printf(“%d”,x);2)間接存取方式:通過(guò)變量p間接得到變量x的地址,再存取變量x值的方式。2.指針變量的定義指針其實(shí)就是地址,是它所指對(duì)象的地址。指針變量:存放變量地址的變量,它用來(lái)指向另一個(gè)變量。指針變量的定義形式為:
類型名*指針變量名;例:int*p;注意:
①
例中指針變量是p,不是*p。②定義指針變量后,系統(tǒng)為其分配存儲(chǔ)空間,用以存放其他變量的地址,但在對(duì)指針變量賦值前,它并沒(méi)有確定的值3.指針變量的初始化1)在定義指針變量的同時(shí)給指針變量賦初值。2)先定義指針變量,然后賦值。intx,*p=&x;intx,*p;p=&x;等價(jià)注意:1)C語(yǔ)言規(guī)定,同類指針可以相互賦值。2)不同類型的指針不能相互賦值。3)一個(gè)指針變量只能指向同一類型的變量。例如:intx,*p1,*p2;p1=&x;p2=p1;例如:intx,z,*p1=&x;floaty,*p2;此時(shí)語(yǔ)句“p2=p1;”是錯(cuò)誤的。4.指針運(yùn)算符1)取地址運(yùn)算符&&變量名2)取內(nèi)容運(yùn)算符**地址注:這里的變量指所有變量,包括下標(biāo)變量,指針變量。注:“*”稱為間接尋址符,即取出“*”后面地址中的內(nèi)容。例如:intx=2,*p=&x;printf("x=%d\n",*p);取內(nèi)容運(yùn)算符含義示意圖注意:1)定義語(yǔ)句中“p”前面的“*”是說(shuō)明p的類型是指針變量。2)除定義語(yǔ)句外的其他語(yǔ)句中出現(xiàn)的“*p”里的“*”是對(duì)p所指變量的引用,即代表它指向的變量。3)*&x相當(dāng)于“*(&x)”,&x是變量x的地址,*(&x)代表變量x。5.指針變量應(yīng)用舉例例5-2
分析下面兩個(gè)程序的運(yùn)行結(jié)果。#include<stdio.h>intmain(){inta,b,m,*p1=&a,*p2=&b;scanf("%d,%d",p1,p2);/*等價(jià)于scanf("%d,%d",&a,&b);*/m=*p1;*p1=*p2;*p2=m; /*等價(jià)于m=a;a=b;b=m;*/printf("%d,%d\n",a,b); printf("%d,%d\n",*p1,*p2);/*等價(jià)于printf("%d,%d\n",a,b);*/return0;}指針、變量關(guān)系示意圖02指向數(shù)組的指針數(shù)組名代表存放數(shù)組元素的連續(xù)存儲(chǔ)空間的首地址1.指向一維數(shù)組的指針變量的定義及初始化1)定義時(shí)賦初值。例如:intx[5],*p=x;
該語(yǔ)句定義了一個(gè)長(zhǎng)度為5的整型數(shù)組x,和指向x數(shù)組的指針p。2)先定義,后賦值。例如:intx[5],*p;p=x;指向一維數(shù)組指針示意圖2.一維數(shù)組元素地址和值的表示方法表5-1元素x[i]的地址和值的表示方法地址值下標(biāo)法&x[i]x[i]指針?lè)ǎǖ刂贩ǎ﹛+i*(x+i)p+i*(p+i)程序1:使用數(shù)組首地址訪問(wèn)數(shù)組元素。#include<stdio.h>intmain(){intx[5],i;for(i=0;i<5;i++)scanf("%d",x+i);/*等價(jià)于scanf("%d",&x[i]);*/for(i=0;i<5;i++)printf("%d\n",*(x+i));/*等價(jià)于printf("%d\n",x[i]);*/return0;}程序2:使用指針訪問(wèn)數(shù)組元素。#include<stdio.h>intmain(){intx[5],i,*p=x;for(i=0;i<5;i++)scanf("%d",p+i);/*等價(jià)于scanf("%d",&x[i]);*/for(i=0;i<5;i++)printf("%d\n",*(p+i));/*等價(jià)于printf("%d\n",x[i]);*/return0;}程序3:通過(guò)移動(dòng)指針訪問(wèn)數(shù)組元素。#include<stdio.h>intmain(){intx[5],*p,i;for(p=x;p<x+5;p++)scanf("%d",p);/*等價(jià)于scanf("%d",&x[i]);*/p=x; /*指針p重新指向數(shù)組首地址*/for(i=0;i<5;i++,p++)printf("%d\n",*p);/*等價(jià)于printf("%d\n",x[i]);*/return0;}p++即p=p+1,它是讓p指針下移1個(gè)結(jié)點(diǎn)(指向下一個(gè)數(shù)組元素)。p+i中p指針未動(dòng),而p=p+i中p指針指向了第i個(gè)元素。p++的寫(xiě)法是正確的,但寫(xiě)x++是錯(cuò)誤的。x+i是正確的,它代表x數(shù)組中第i號(hào)元素的地址,即&x[i]。03字符指針字符指針是指向字符型數(shù)據(jù)的指針變量。1.字符指針變量的定義和初始化C語(yǔ)言對(duì)字符串常量是按字符數(shù)組處理的,在內(nèi)存中占用一段連續(xù)的存儲(chǔ)空間存放字符串,并有唯一確定的首地址。用指針表示一個(gè)字符串分兩步:①定義一個(gè)指向字符型的指針。②讓該指針指向某一字符串,即將這個(gè)串的首地址賦給一個(gè)指針變量。例如:char*p="ChanganRoad";/*定義字符型指針變量p,指向串的首字符地址*/或char*p;p="ChanganRoad";指針p指向字符串例5-9
分析下列程序,寫(xiě)出運(yùn)行結(jié)果。#include<stdio.h>intmain(){char*p="abcd";while(*p!='\0'){printf("%s\n",p);p++;}return0;}指針移動(dòng)示意1)%s是字符串輸入、輸出格式字符。開(kāi)始輸出從p指針?biāo)肝恢玫浇Y(jié)束符'\0'為止的所有字符。2)第一次執(zhí)行p++的結(jié)果使p指向串″bcd″的起始地址,執(zhí)行%s輸出形式后,從b到'\0'的所有字符輸出。程序運(yùn)行結(jié)果如下:abcdbcdcdd04指針數(shù)組由若干基類型相同的指針?biāo)鶚?gòu)成的數(shù)組1.指針數(shù)組的概念1)定義形式類型名*數(shù)組名[數(shù)組長(zhǎng)度];例如:int*p[3];這里,p為指針數(shù)組名,說(shuō)明p有3個(gè)元素,即3個(gè)指針,均為指向整型的指針變量,三個(gè)指針變量為p[0]、p[1]、p[2]。2)指針數(shù)組的賦值使用之前必須對(duì)數(shù)組元素進(jìn)行初始化賦值后再引用。1)若定義:intx[3][4],*p[3],i;如果想用p的三個(gè)指針?lè)謩e指向x數(shù)組各行,可用下列語(yǔ)句賦值。for(i=0;i<3;i++) p[i]=x[i];指針數(shù)組指向示意注意:①對(duì)二維數(shù)組x[3][4]來(lái)講,x[i]代表第i行的首地址,即p[i]=&x[i][0]。②p[i]+j和x[i]+j是等價(jià)的,都代表x[i][j]的地址:*(p[i]+j)和*(x[i]+j)是等價(jià)的,都代表元素x[i][j]。③若一個(gè)二維數(shù)組的行數(shù)很多,要使多個(gè)指針?lè)謩e指向各行,用指針數(shù)組運(yùn)算更方便。2)若定義和賦值如下:inty[8],*p[2];p[0]=&y[0];p[1]=&y[5];指針指向示意2.指針數(shù)組應(yīng)用舉例#include<stdio.h>intmain()/*定義具有3個(gè)元素的指針數(shù)組,讓各指針?lè)謩e指向3個(gè)字符串首字符的地址*/{char*p[3]={"ab","abc","abcd"};inti;for(i=0;i<3;i++)printf("%s\n",p[i]);/*輸出各個(gè)字符串*/return0;}程序運(yùn)行結(jié)果如下:ababcabcd二維字符數(shù)組示意該程序中每個(gè)指針數(shù)組元素指向一個(gè)字符串,這3個(gè)字符串按各自的長(zhǎng)度放在常量區(qū)。05返回指針值的函數(shù)一個(gè)函數(shù)的返回值是一個(gè)地址,多用于字符串運(yùn)算。返回指針值的函數(shù)一般定義形式為:類型名*函數(shù)名(形參表)#include<stdio.h>int*max(inta[],intn){inti,*p=a; /*相當(dāng)于inti,*p=&a[0];*/for(i=1;i<n;i++)if(*p<a[i]) /*若p所指當(dāng)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 江蘇省鹽城市亭湖新區(qū)初級(jí)中學(xué) 蘇科版物理八年級(jí)上冊(cè) 八年級(jí)第一學(xué)期期末質(zhì)量檢測(cè)物理(含答案)
- 河北省張家口市橋西區(qū)2024-2025學(xué)年八年級(jí)上學(xué)期1月期末生物試卷(含答案)
- 5合同評(píng)審控制程序
- 地理-山東省2025年1月濟(jì)南市高三期末學(xué)習(xí)質(zhì)量檢測(cè)濟(jì)南期末試題和答案
- 2023年南京中醫(yī)藥大學(xué)中醫(yī)內(nèi)科學(xué)題庫(kù)
- 2024認(rèn)定實(shí)際施工人法律風(fēng)險(xiǎn)防范與合同完善服務(wù)合同3篇
- 2025年度工業(yè)互聯(lián)網(wǎng)安全電子交易SET合作協(xié)議3篇
- 2024高端設(shè)備制造銷售合同
- 2024年心理健康教育主題班會(huì)教案13篇
- 2024蔬菜大棚溫室租賃與智能控制系統(tǒng)供應(yīng)合同3篇
- 園林景觀給排水設(shè)計(jì)匯總計(jì)算書(shū)
- 《電線電纜常用計(jì)算公式》
- 美國(guó)簽證-個(gè)人信息表
- 關(guān)于心理健康教育情況的調(diào)研報(bào)告
- 內(nèi)側(cè)蒂直線短瘢痕法治療乳房肥大癥的臨床研究
- 天一大聯(lián)考2024屆物理高一上期末學(xué)業(yè)水平測(cè)試試題含解析
- 整改回復(fù)書(shū)樣板后邊附帶圖片
- 空氣能施工方案
- 常見(jiàn)藻類圖譜(史上最全版本)
- 硫酸裝置操作規(guī)程
- Python數(shù)據(jù)分析案例實(shí)戰(zhàn)PPT完整全套教學(xué)課件
評(píng)論
0/150
提交評(píng)論