版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
指針本章內(nèi)容第一節(jié)指針和指針變量第二節(jié)指針和數(shù)組第三節(jié)指針和字符串第四節(jié)指針和函數(shù)一、指針1、地址第一節(jié)指針和指針變量?jī)?nèi)存是以字節(jié)為單位的存儲(chǔ)空間,內(nèi)存的每個(gè)字節(jié)都有唯一的編號(hào),這個(gè)編號(hào)就稱為地址。定義一個(gè)變量時(shí),系統(tǒng)會(huì)分配相應(yīng)的內(nèi)存空間來(lái)存儲(chǔ)這個(gè)變量,不同類型的變量分配的內(nèi)存空間是不一樣的,例如int變量分配4個(gè)字節(jié),char變量分配1個(gè)字節(jié)。變量所占內(nèi)存空間的第一個(gè)字節(jié)的地址就是該變量的地址。2、指針變量在內(nèi)存中的地址稱為變量的指針。程序中使用的其他數(shù)據(jù),如數(shù)組、字符串、函數(shù)等,系統(tǒng)也會(huì)分配內(nèi)存空間,因此這些數(shù)據(jù)也有相應(yīng)的指針。二、指針變量1、指針變量的定義指針變量的定義格式為:數(shù)據(jù)類型*指針變量名列表;和其他變量一樣,指針變量必須先定義后使用。指針變量是指存放內(nèi)存地址的變量,即存放指針的變量。當(dāng)指針變量中存放某個(gè)數(shù)據(jù)的地址時(shí),一般稱為指針變量指向該數(shù)據(jù)。說(shuō)明:(4)和其他變量一樣,系統(tǒng)也會(huì)為指針變量分配內(nèi)存空間。無(wú)論指針變量指向哪種數(shù)據(jù)類型,其占用的內(nèi)存空間都是相同的。(2)指針變量名前的*是說(shuō)明符,表示該變量為指針變量,它不屬于指針變量名。(1)數(shù)據(jù)類型表示指針變量所指向數(shù)據(jù)的類型。指針變量只能指向定義時(shí)所指定類型的數(shù)據(jù)。(3)同時(shí)定義多個(gè)指針變量時(shí),每個(gè)變量前面都要有*,否則就是普通變量。2、相關(guān)運(yùn)算符&
取地址運(yùn)算符*指針運(yùn)算符,也稱間接尋址運(yùn)算符3、指針變量的初始化指針變量定義后必須先初始化才可以使用。指針變量初始化的方法可以有以下兩種:(1)定義指針變量的同時(shí)進(jìn)行初始化。(2)先定義指針變量,再用賦值語(yǔ)句進(jìn)行初始化。4、指針變量的運(yùn)算(1)指針變量與整數(shù)的加減運(yùn)算指針變量與整數(shù)進(jìn)行加減運(yùn)算時(shí),是由指針變量指向的數(shù)據(jù)類型的字節(jié)數(shù)決定實(shí)際的加減值。(3)指針變量之間的關(guān)系運(yùn)算兩個(gè)指向相同類型數(shù)據(jù)的指針變量之間可以進(jìn)行關(guān)系運(yùn)算,如==、<和>。(2)指針變量之間的減法運(yùn)算兩個(gè)指向相同類型數(shù)據(jù)的指針變量之間可以進(jìn)行減法運(yùn)算,結(jié)果是兩個(gè)指針之間的數(shù)據(jù)個(gè)數(shù)。程序段10-1#include<iostream>usingnamespacestd;intmain(){ intn1,n2,max;
int*p1,*p2;//定義指針變量p1和p2 cout<<"輸入兩個(gè)數(shù):";cin>>n1>>n2;
p1=&n1;//指針變量p1指向n1
p2=&n2
max=*p1 if(max<n2) { max=*p2; } cout<<"大數(shù)是"<<max<<endl;return0;}一、指向數(shù)組元素的指針變量的定義和賦值1、指向數(shù)組元素的指針變量的定義第二節(jié)指針和數(shù)組指向數(shù)組元素的指針變量定義方法與指向變量的指針變量定義方法相同。例如:
inta[5]; int*p;2、指向數(shù)組元素的指針變量的賦值例如:
p=&a[0];數(shù)組名代表數(shù)組的首地址,即數(shù)組元素a[0]的地址,因此上面的賦值語(yǔ)句也可以寫(xiě)為:
p=a;賦值也可以在定義指針變量的同時(shí)進(jìn)行。例如:
inta[5];int*p=&a[0];//也可以寫(xiě)為int*p=a;二、訪問(wèn)數(shù)組元素使用指針運(yùn)算符*來(lái)訪問(wèn)數(shù)組元素。指針變量p指向數(shù)組的第一個(gè)元素時(shí),使用*(p+i)就可以訪問(wèn)數(shù)組的第i個(gè)元素。因?yàn)閍也表示數(shù)組首地址,所以訪問(wèn)數(shù)組的第i個(gè)元素也可以使用*(a+i)的形式。訪問(wèn)數(shù)組元素主要有以下兩種方法:下標(biāo)法指針?lè)ㄖ羔樧兞縫也可以指向數(shù)組的其他元素,當(dāng)p指向數(shù)組的第n個(gè)元素時(shí),*(p+i)表示訪問(wèn)數(shù)組的第n+i個(gè)元素。而數(shù)組名a是常量,它的值不能改變,只能指向數(shù)組的開(kāi)頭。程序段10-2#include<iostream>usingnamespacestd;intmain(){ inta[5],i; int*p=a;cout<<"輸入數(shù)組的5個(gè)數(shù):"; for(i=0;i<5;i++) cin>>*(a+i);//*(a+i)表示數(shù)組元素a[i] cout<<"反向輸出:";for(i=4;i>=0;i--)//從數(shù)組最后一個(gè)元素開(kāi)始,依次向前輸出元素
cout<<*(p+i)<<"";//*(p+i)也表示數(shù)組元素a[i] return0;}一、指向字符串的指針變量的定義和賦值1、字符指針變量指向字符數(shù)組
第三節(jié)指針和字符串字符串存放在事先定義的字符數(shù)組中。例如:
charstr[10]="computer"; char*sp; sp=str;2、字符指針變量直接指向字符串沒(méi)有事先定義的字符數(shù)組。例如:
constchar*sp="computer";VisualStudio2022中,字符指針變量直接指向字符串時(shí),因?yàn)樽址浅A浚孕枰赾har前面加const。二、訪問(wèn)字符串中的字符根據(jù)字符指針變量的不同指向,訪問(wèn)字符有以下兩種情況:(2)如果字符指針變量指向字符串常量,需要注意,字符串中的字符只能讀取而不能寫(xiě)入,即不能修改字符值。(1)如果字符指針變量指向字符數(shù)組,則數(shù)組中的每個(gè)字符都可以讀取和寫(xiě)入。程序段10-4#include<iostream>usingnamespacestd;intmain(){charstr[30];
char*sp=str; cout<<"輸入字符串:";cin.getline(sp,30);cout<<"輸出大寫(xiě)字母:"; for(;*sp!='\0';sp++) if(*sp>='A'&&*sp<='Z') cout<<*sp;cout<<endl;return0;}一、指針變量作為函數(shù)參數(shù)1、指向普通變量的指針變量作為函數(shù)參數(shù)第四節(jié)指針和函數(shù)指針變量作函數(shù)參數(shù)時(shí),形參會(huì)從實(shí)參獲得變量的地址,因此形參和實(shí)參指向同一個(gè)變量。當(dāng)形參指向的變量發(fā)生變化時(shí),實(shí)參指向的變量就同時(shí)改變。當(dāng)函數(shù)參數(shù)是普通變量時(shí),實(shí)參和形參間進(jìn)行的是值傳遞,而當(dāng)函數(shù)參數(shù)是指針變量時(shí),實(shí)參和形參間進(jìn)行的則是地址傳遞。程序段10-5#include<iostream>usingnamespacestd;voidswap(int*p1,int*p2)//指針變量p1和p2為形參//swap是交換兩個(gè)變量值的函數(shù){ inttemp;
temp=*p1; *p1=*p2; *p2=temp;}intmain(){ inta,b; cin>>a>>b; if(a>b) swap(&a,&b);//變量a和b的地址為實(shí)參
cout<<"從小到大輸出:"; cout<<a<<''<<b<<endl; return0;}2、指向數(shù)組元素的指針變量作為函數(shù)參數(shù)數(shù)組名表示數(shù)組的首地址,如果定義一個(gè)指向數(shù)組第一個(gè)元素的指針變量,那么這個(gè)指針變量也表示數(shù)組的首地址,和數(shù)組名含義相同,所以也可以用指向數(shù)組第一個(gè)元素的指針變量來(lái)作為函數(shù)參數(shù)。數(shù)組名可以作為函數(shù)參數(shù),在函數(shù)調(diào)用時(shí),實(shí)參數(shù)組的首地址會(huì)傳遞給形參數(shù)組,因此兩個(gè)數(shù)組占用同一段內(nèi)存空間,形參數(shù)組中的元素發(fā)生變化時(shí),實(shí)參數(shù)組中的元素也會(huì)有相同的變化。數(shù)組名或指針變量作為函數(shù)參數(shù)有以下四種情況:實(shí)參和形參都是指針變量。實(shí)參是指針變量,形參是數(shù)組名;實(shí)參是數(shù)組名,形參是指針變量;實(shí)參和形參都是數(shù)組名;程序段10-6voidreplace(int
*p,intn){ inti; for(i=0;i<n;i++,p++) if(*p<0) *p=0;}intmain(){ inta[5],i;
int*pa=a; cout<<"輸入數(shù)組元素:"; for(i=0;i<5;i++) cin>>a[i]; replace(pa,5);
cout<<"替換后的數(shù)組元素:"; for(i=0;i<5;i++) cout<<a[i]<<''; return0;}需要注意,不管使用哪種方式傳遞數(shù)組,都不能在函數(shù)內(nèi)部求得數(shù)組長(zhǎng)度,因?yàn)閰?shù)只是一個(gè)指針,而不是真正的數(shù)組,所以必須要用另外一個(gè)參數(shù)來(lái)傳遞數(shù)組長(zhǎng)度。程序段10-7voidconnect(char*p1,char*p2){ for(;*p1!='\0';p1++);//p1指向字符串1結(jié)束符'\0' for(;*p2!='\0';p2++) if(*p2>='0'&&*p2<='9') { *p1=*p2; p1++; } *p1='\0';//連接后在字符串1末尾添加結(jié)束符'\0'}intmain(){ charstr1[30],str2[20];
char*ps1=str1; char*ps2=str2; cout<<"輸入兩個(gè)字符串:"<<endl; cin.getline(ps1,30); cin.getline(ps2,20); connect(ps1,ps2); cout<<ps1<<endl; return0;}二、指針作為函數(shù)返回值返回值是指針的函數(shù)稱為指針函數(shù)。指針函數(shù)的定義格式為:數(shù)據(jù)類型*函數(shù)名(參數(shù)列表){
函數(shù)體}每個(gè)函數(shù)最多只能有一個(gè)返回值,如果需要返回多個(gè)值,則可以通過(guò)指針函數(shù)來(lái)完成,返回一個(gè)指向多個(gè)值的指針。程序段10-8#include<iostream>#include<string.h>usingnamespacestd;char*longer(char*p1,char*p2){ if(strlen(p1)>=strlen(p2)) returnp1;//返回值為指向字符數(shù)組的指針
else returnp2;}intmain(){ charstr1[30],str2[30]; char*str; char*ps1=str1; char*ps2=str2; cout<<"輸入兩個(gè)字符串:"<<endl; cin.getline(ps1,30); cin.getline(ps2,30); str=longer(ps1,ps2);//將函數(shù)返回的指針賦值給指針變量str cout<<"較長(zhǎng)的字符串是:"<<endl; cout<<str<<endl; return0;}三、函數(shù)指針變量(擴(kuò)展內(nèi)容)1、函數(shù)指針變量的定義函數(shù)所占用內(nèi)存的首地址稱為函數(shù)指針,指向函數(shù)指針的變量就是函數(shù)指針變量。函數(shù)指針變量的定義格式為:數(shù)據(jù)類型(*函數(shù)指針變量名)(參數(shù)列表);參數(shù)列表中可以同時(shí)給出參數(shù)的類型和名稱,也可以只給出參數(shù)的類型,省略參數(shù)的名稱。函數(shù)指針變量名的括號(hào)不能省略。2、函數(shù)指針變量的使用定義函數(shù)指針變量后,就可以把一個(gè)函數(shù)的首地址賦給這個(gè)指針變量,使指針變量指向這個(gè)函數(shù),然后通過(guò)函數(shù)指針變量調(diào)用該函數(shù)。調(diào)用函數(shù)的格式為:(*函數(shù)指針變量名)(參數(shù)列表);程序段10-9#include<iostream>usingnamespacestd;intmax(intn1,intn2){ intm; if(n1>n2) m=n1; else m=n2; returnm;}intmain()
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度形婚雙方婚姻關(guān)系協(xié)議及婚后財(cái)產(chǎn)分割與子女撫養(yǎng)安排3篇
- 二零二五年度文化創(chuàng)意產(chǎn)業(yè)園區(qū)場(chǎng)地轉(zhuǎn)租合同3篇
- 2025年度高新技術(shù)研發(fā)貸款擔(dān)保協(xié)議3篇
- 2025年度消防安全設(shè)施設(shè)備安裝與驗(yàn)收協(xié)議3篇
- 2025年度內(nèi)墻粉刷施工與室內(nèi)空氣凈化技術(shù)合作合同3篇
- 二零二五年度生豬養(yǎng)殖與農(nóng)產(chǎn)品市場(chǎng)銷售合作合同范本3篇
- 2025年度公司對(duì)個(gè)人創(chuàng)業(yè)團(tuán)隊(duì)對(duì)賭合同3篇
- 二零二五年度企業(yè)車輛共享平臺(tái)使用服務(wù)合同3篇
- 2025年度公司與公司簽訂的體育產(chǎn)業(yè)合作發(fā)展協(xié)議2篇
- 2025年度養(yǎng)殖場(chǎng)農(nóng)產(chǎn)品質(zhì)量安全檢測(cè)合同3篇
- 深基坑開(kāi)挖及支護(hù)施工方案-經(jīng)專家論證
- 領(lǐng)導(dǎo)科學(xué)全套精講課件
- 粵教版地理七年級(jí)下冊(cè)全冊(cè)課件
- 排水管渠及附屬構(gòu)筑物
- 養(yǎng)豬場(chǎng)施工噪聲環(huán)境影響分析
- Windows-Server-2012網(wǎng)絡(luò)服務(wù)架構(gòu)課件(完整版)
- 形位公差_很詳細(xì)(基礎(chǔ)教育)
- 手榴彈使用教案
- 600MW機(jī)組除氧器水位控制系統(tǒng)
- 史上最全的涉稅風(fēng)險(xiǎn)
- 初中數(shù)學(xué)問(wèn)題情境的創(chuàng)設(shè)
評(píng)論
0/150
提交評(píng)論