版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
單元七
指針導(dǎo)學(xué)【問題】
定義一個整型變量a,如何知道分配給變量a的存儲空間的地址編碼是多少?如何通過指針對變量a進(jìn)行操作?2指針變量的應(yīng)用目錄1如何定義指針變量7.1.1內(nèi)存地址與指針(1)內(nèi)存地址
在計算機(jī)中,內(nèi)存空間的最小單位為字節(jié),操作系統(tǒng)會為每個字節(jié)的內(nèi)存空間進(jìn)行編號,這個編號就是內(nèi)存地址。變量存儲空間的第一個字節(jié)對應(yīng)的內(nèi)存地址可看作是存儲地址。
內(nèi)存空間10001001內(nèi)存地址inta;//占用4個字節(jié)charc;//占用1個字節(jié)1002100310047.1.1內(nèi)存地址與指針(2)指針與指針變量
根據(jù)存儲地址可以訪問相應(yīng)的存儲單元,所以通常也把地址稱為指針。C語言允許定義一個變量來存放指針,這種變量就稱為指針變量。1000P110001001內(nèi)存地址10021003指針變量
內(nèi)存空間charc;//占用1個字節(jié)inta;//占用4個字節(jié)1001P210047.1.2指針變量的定義與初始化(1)指針變量的定義定義指針變量的一般格式:
類型名
*變量名;類型名:表示該指針變量只能保存該類型變量的指針。*:表示該變量是指針變量,只能保存地址數(shù)據(jù)。變量名:表示指針變量的名稱,變量名的命名需遵循標(biāo)識符命名規(guī)則。int*p1;//p1是指向整型數(shù)據(jù)的指針變量char*p2;//p2是指向字符型數(shù)據(jù)的指針變量7.1.2指針變量的定義與初始化(2)指針變量的初始化第一種:定義指針變量的同時進(jìn)行初始
第二種:先定義指針變量,然后再進(jìn)行初始
int*p=NULL;//指針初始化為空inta=5;//定義整型變量aint*p;//定義指針變量p
p=&a;//p指向變量aint*p=&a;等價于7.1.3指針變量的引用指針變量的運(yùn)算符有兩個:“*”和“&”?!?”是指針運(yùn)算符,也稱為間接引用操作符,它返回指針指向的變量的值?!?”是取地址運(yùn)算符,它返回運(yùn)算對象的內(nèi)存地址。inta=5,b,*p;p=&a;//指針變量p指向a的地址b=*p;//將p所指向變量a的值賦給b注:定義指針變量和引用指針變量都有符號“*”,但含義不同,前者是指針類型的
表示符,表示p是一個指針變量,后者表示指針變量所指向的變量。7.1.3指針變量的引用#include<stdio.h>intmain(){
inta=5;
//定義整型變量a,并進(jìn)行初始化
int*p1,*p2;//定義兩個指針變量p1、p2
p1=&a;//對p1進(jìn)行初始,p1指向變量a
p2=p1;
//將指針變量p1的值賦給p2,p2指向變量a
printf("*p1=%d\n*p2=%d",*p1,*p2);
return0;}【例7-1】對指針變量的操作運(yùn)行結(jié)果:7.1.3指針變量的引用#include<stdio.h>intmain(){
inta=5;
int*p1,*p2;
p1=&a;
p2=p1;
printf("*p1=%d\n*p2=%d\n",*p1,*p2);
scanf("%d",p1);//輸入10
printf("*p1=%d\n*p2=%d\n",*p1,*p2);
return0;}【例7-2】對指針變量指向的變量的操作運(yùn)行結(jié)果:7.1.3指針變量的引用#include<stdio.h>voidswap(int*p1,int*p2)//自定義函數(shù)swap{
inttemp;
temp=*p1;
*p1=*p2;
*p2=temp;}intmain(){
inta=5,b=10;
printf("a=%db=%d\n",a,b);
swap(&a,&b);//調(diào)用自定義函數(shù)
printf("a=%db=%d\n",a,b);
return0;}【例7-3】利用自定義函數(shù)交換兩個變量的值運(yùn)行結(jié)果:7.1.3指針變量的引用#include<stdio.h>voidswap(inta,intb){
inttemp;
temp=a;
a=b;
b=temp;}intmain(){
inta=5,b=10;
printf("a=%db=%d\n",a,b);
swap(a,b);
printf("a=%db=%d\n",a,b);
return0;}【思考】以下以下程序是否可以完成兩個變量值的交換運(yùn)行結(jié)果:1如何定義指針變量目錄2指針變量的應(yīng)用7.2.1一維數(shù)組與指針(1)建立指針與數(shù)組的關(guān)系p=a;inta[5];int*p;//建立數(shù)組a與指針p之間的關(guān)系等價于p=&a[0];如何建立數(shù)組a與指針p之間的關(guān)系?p
p+1
a+1p+2
a+2p+3
a+3p+4
a+4a[1]a[0]a[2]a[3]a[4]
數(shù)組a[5]a內(nèi)存單元7.2.1一維數(shù)組與指針(2)指針運(yùn)算數(shù)組名a表示數(shù)組的初始地址,p指向數(shù)組的第一個元素a[0],p+1指向下一個數(shù)組元素a[1]。p+1、p-1并不是數(shù)學(xué)中計算,而是表示移動一個“單元”,對于int類型來講,p和p+1相差4個字節(jié),若數(shù)組的初始地址為1000,那么p+1的值為1004。地址間關(guān)系:&a[0]<==>a<==>p;&a[i]<==>a+i<==>p+i;元素間關(guān)系:a[0]<==>*a<==>*p;a[i]<==>*(a+i)<==>*(p+i);p
p+1
a+1p+2
a+2p+3
a+3p+4
a+4a[1]a[0]a[2]a[3]a[4]
數(shù)組a[5]a內(nèi)存單元7.2.1一維數(shù)組與指針(3)利用指針變量訪問數(shù)組#include<stdio.h>intmain(){inta[5]={1,2,3,4,5};inti;
int*p;
p=a;
for(i=0;i<=4;i++)
{
printf("元素a[%d]的地址:%p,值為:%d\n",i,p+i,*(p+i));
}
return0;}【例7-5】利用指針變量p訪問數(shù)組a7.2.1一維數(shù)組與指針#include<stdio.h>voidmax(int*p,intn){
inti,max=*p;
for(i=0;i<n;i++)
{
if(max<*(p+i))
max=*(p+i);
}
printf("最大值為%d",max);}intmain(){
inta[5]={1,2,3,4,5};max(a,5);
return0;}【例7-6】利用指針變量p尋找數(shù)組a中的最大值7.2.2二維數(shù)組與指針(1)二維數(shù)組中所蘊(yùn)含的地址關(guān)系inta[3][3]={1,2,3,4,5,6,7,8,9};二維數(shù)組a由3個元素組成:a[0]、a[1]、a[2]a[0]包含有
3
個元素:a[0][0]、a[0][1]、a[0][2]a[0]a[1]a[2]123456789a7.2.2二維數(shù)組與指針(1)二維數(shù)組中所蘊(yùn)含的地址關(guān)系a代表二維數(shù)組的首地址,也是二維數(shù)組第0行的首地址。a+1代表第1行的首地址。aa+1a+210001個整型變量占4個字節(jié),一行12占用個字節(jié)10121024a[0]a[1]a[2]1234567897.2.2二維數(shù)組與指針(1)二維數(shù)組中所蘊(yùn)含的地址關(guān)系a[0]代表二維數(shù)組第0行的首地址,a[i]代表第i行的首地址。a[0]也代表第0行第0個元素地址,a[0]+i代表第0行的第i個元素地址。123456789a[0]1000a[0]+1a[0]+2a[1]a[2]7.2.2二維數(shù)組與指針(1)二維數(shù)組中所蘊(yùn)含的地址關(guān)系二維數(shù)組元素a[i][j]的地址以及值的表示歸納總結(jié)為:地址表示方法:&a[i][j]<==>a[i]+j<==>*(a+i)+j值表示方法:a[i][j]<==>*(a[i]+j)<==>*(*(a+i)+j)7.2.2二維數(shù)組與指針(2)指針在二維數(shù)組中的應(yīng)用---指針數(shù)組定義:數(shù)組元素全為指針變量的數(shù)組稱為指針數(shù)組,指針數(shù)組中的元素都必須具有相同的存儲類型、指向相同數(shù)據(jù)類型的指針變量。指針數(shù)組定義的一般格式:int*p[n];
注意:[]優(yōu)先級高,先與p結(jié)合成為一個數(shù)組,再由int*說明這是一個整型指針數(shù)組,它有n個指針類型的數(shù)組元素,為p[0]、p[1]、p[2]...p[n-1],而且它們都是指針變量,用來存放變量地址。7.2.2二維數(shù)組與指針【例7-7】利用指針數(shù)組遍歷二維數(shù)組a[3][3]={1,2,3,4,5,6,7,8,9}#include<stdio.h>intmain(){
inta[3][3]={1,2,3,4,5,6,7,8,9};int*p[3];//定義一個指針數(shù)組inti,j;
for(i=0;i<3;i++)
p[i]=a[i];
//數(shù)組指針賦初值,為二維數(shù)組每行地址
for(i=0;i<3;i++){
for(j=0;j<3;j++)
printf("%d",*(p[i]+j));
printf("\n");}
return0;}運(yùn)行結(jié)果:(2)指針在二維數(shù)組中的應(yīng)用---行指針定義:行指針也稱為數(shù)組指針,指的是數(shù)組名的指針,即數(shù)組首元素地址的指針。行指針定義的一般格式:int(*p)[n];()優(yōu)先級高,首先說明p是一個指針,指向一個整型的一維數(shù)組,這個一維數(shù)組的長度是n,可以說是p的步長。當(dāng)執(zhí)行p+1時,p要跨過n個整型數(shù)據(jù)的長度。7.2.2二維數(shù)組與指針7.2.2二維數(shù)組與指針【例7-7】利用行指針遍歷二維數(shù)組a[3][3]={1,2,3,4,5,6,7,8,9}#include<stdio.h>intmain(){
inta[3][3]={1,2,3,4,5,6,7,8,9};
int(*p)[3];//定義一個行指針p,指向一個二維數(shù)組,[3]表示指針指向的行包含的元素個數(shù)
inti,j;p=a;
for(i=0;i<3;i++){
for(j=0;j<3;j++)
printf("%d",*(*(p+i)+j));
printf("\n");}
return0;}運(yùn)行結(jié)果:7.2.3字符串與指針“helloworld!"
由雙引號括起來的字符序列
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)學(xué)思維在醫(yī)療數(shù)據(jù)分析中的應(yīng)用
- 玉溪云南玉溪市紅塔區(qū)委社會工作部公益性崗位招聘筆試歷年參考題庫附帶答案詳解
- 浙江2024年下半年浙江國際海運(yùn)職業(yè)技術(shù)學(xué)院招聘高層次人才筆試歷年參考題庫附帶答案詳解
- 河北2025年河北建材職業(yè)技術(shù)學(xué)院選聘2人筆試歷年參考題庫附帶答案詳解
- 江門廣東江門臺山市衛(wèi)生健康局下屬公益一類事業(yè)單位招聘編外人員11人筆試歷年參考題庫附帶答案詳解
- 楚雄云南楚雄雙江自治縣綜合行政執(zhí)法局招聘編外長聘人員筆試歷年參考題庫附帶答案詳解
- 2025個人房產(chǎn)抵押貸款合同變更協(xié)議
- 昭通云南昭通市公安局昭陽分局警務(wù)輔助人員招聘22人筆試歷年參考題庫附帶答案詳解
- 2025年度個人工程車租賃及事故救援服務(wù)合同
- 2025年新型太陽能熱水器安全檢查與定期維保專項(xiàng)合同2篇
- 《健康體檢知識》課件
- 2023年護(hù)理人員分層培訓(xùn)、考核計劃表
- 生產(chǎn)計劃主管述職報告
- GB/T 44769-2024能源互聯(lián)網(wǎng)數(shù)據(jù)平臺技術(shù)規(guī)范
- 2025年四川省新高考八省適應(yīng)性聯(lián)考模擬演練(二)地理試卷(含答案詳解)
- 【經(jīng)典文獻(xiàn)】《矛盾論》全文
- 部編版語文五年級下冊 第一單元 專項(xiàng)訓(xùn)練課外閱讀(含答案)
- 2024年寧夏回族自治區(qū)中考英語試題含解析
- 客人在酒店受傷免責(zé)承諾書范本
- 練字本方格模板
- 《老山界》第1第2課時示范公開課教學(xué)PPT課件【統(tǒng)編人教版七年級語文下冊】
評論
0/150
提交評論