版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
單元七
指針導(dǎo)學(xué)【問題】
定義一個(gè)整型變量a,如何知道分配給變量a的存儲(chǔ)空間的地址編碼是多少?如何通過指針對(duì)變量a進(jìn)行操作?2指針變量的應(yīng)用目錄1如何定義指針變量7.1.1內(nèi)存地址與指針(1)內(nèi)存地址
在計(jì)算機(jī)中,內(nèi)存空間的最小單位為字節(jié),操作系統(tǒng)會(huì)為每個(gè)字節(jié)的內(nèi)存空間進(jìn)行編號(hào),這個(gè)編號(hào)就是內(nèi)存地址。變量存儲(chǔ)空間的第一個(gè)字節(jié)對(duì)應(yīng)的內(nèi)存地址可看作是存儲(chǔ)地址。
內(nèi)存空間10001001內(nèi)存地址inta;//占用4個(gè)字節(jié)charc;//占用1個(gè)字節(jié)1002100310047.1.1內(nèi)存地址與指針(2)指針與指針變量
根據(jù)存儲(chǔ)地址可以訪問相應(yīng)的存儲(chǔ)單元,所以通常也把地址稱為指針。C語(yǔ)言允許定義一個(gè)變量來(lái)存放指針,這種變量就稱為指針變量。1000P110001001內(nèi)存地址10021003指針變量
內(nèi)存空間charc;//占用1個(gè)字節(jié)inta;//占用4個(gè)字節(jié)1001P210047.1.2指針變量的定義與初始化(1)指針變量的定義定義指針變量的一般格式:
類型名
*變量名;類型名:表示該指針變量只能保存該類型變量的指針。*:表示該變量是指針變量,只能保存地址數(shù)據(jù)。變量名:表示指針變量的名稱,變量名的命名需遵循標(biāo)識(shí)符命名規(guī)則。int*p1;//p1是指向整型數(shù)據(jù)的指針變量char*p2;//p2是指向字符型數(shù)據(jù)的指針變量7.1.2指針變量的定義與初始化(2)指針變量的初始化第一種:定義指針變量的同時(shí)進(jìn)行初始
第二種:先定義指針變量,然后再進(jìn)行初始
int*p=NULL;//指針初始化為空inta=5;//定義整型變量aint*p;//定義指針變量p
p=&a;//p指向變量aint*p=&a;等價(jià)于7.1.3指針變量的引用指針變量的運(yùn)算符有兩個(gè):“*”和“&”?!?”是指針運(yùn)算符,也稱為間接引用操作符,它返回指針指向的變量的值?!?”是取地址運(yùn)算符,它返回運(yùn)算對(duì)象的內(nèi)存地址。inta=5,b,*p;p=&a;//指針變量p指向a的地址b=*p;//將p所指向變量a的值賦給b注:定義指針變量和引用指針變量都有符號(hào)“*”,但含義不同,前者是指針類型的
表示符,表示p是一個(gè)指針變量,后者表示指針變量所指向的變量。7.1.3指針變量的引用#include<stdio.h>intmain(){
inta=5;
//定義整型變量a,并進(jìn)行初始化
int*p1,*p2;//定義兩個(gè)指針變量p1、p2
p1=&a;//對(duì)p1進(jìn)行初始,p1指向變量a
p2=p1;
//將指針變量p1的值賦給p2,p2指向變量a
printf("*p1=%d\n*p2=%d",*p1,*p2);
return0;}【例7-1】對(duì)指針變量的操作運(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】對(duì)指針變量指向的變量的操作運(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ù)交換兩個(gè)變量的值運(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;}【思考】以下以下程序是否可以完成兩個(gè)變量值的交換運(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)系等價(jià)于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ù)組的第一個(gè)元素a[0],p+1指向下一個(gè)數(shù)組元素a[1]。p+1、p-1并不是數(shù)學(xué)中計(jì)算,而是表示移動(dòng)一個(gè)“單元”,對(duì)于int類型來(lái)講,p和p+1相差4個(gè)字節(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個(gè)元素組成:a[0]、a[1]、a[2]a[0]包含有
3
個(gè)元素: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個(gè)整型變量占4個(gè)字節(jié),一行12占用個(gè)字節(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個(gè)元素地址,a[0]+i代表第0行的第i個(gè)元素地址。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ù)組中的元素都必須具有相同的存儲(chǔ)類型、指向相同數(shù)據(jù)類型的指針變量。指針數(shù)組定義的一般格式:int*p[n];
注意:[]優(yōu)先級(jí)高,先與p結(jié)合成為一個(gè)數(shù)組,再由int*說明這是一個(gè)整型指針數(shù)組,它有n個(gè)指針類型的數(shù)組元素,為p[0]、p[1]、p[2]...p[n-1],而且它們都是指針變量,用來(lái)存放變量地址。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];//定義一個(gè)指針數(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)先級(jí)高,首先說明p是一個(gè)指針,指向一個(gè)整型的一維數(shù)組,這個(gè)一維數(shù)組的長(zhǎng)度是n,可以說是p的步長(zhǎng)。當(dāng)執(zhí)行p+1時(shí),p要跨過n個(gè)整型數(shù)據(jù)的長(zhǎng)度。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];//定義一個(gè)行指針p,指向一個(gè)二維數(shù)組,[3]表示指針指向的行包含的元素個(gè)數(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!"
由雙引號(hào)括起來(lái)的字符序列
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)村房屋買賣合同(2篇)
- 第1單元 古代亞非文明(A卷·知識(shí)通關(guān)練)(解析版)
- 2024-2025學(xué)年廣東省深圳市寶安區(qū)七年級(jí)(上)期末語(yǔ)文試卷
- 2025年環(huán)格蓬酯項(xiàng)目可行性研究報(bào)告
- 2021-2026年中國(guó)航空航天行業(yè)市場(chǎng)深度分析及“十四五”規(guī)劃戰(zhàn)略分析報(bào)告
- (二模)2025年新疆普通高考適應(yīng)性檢測(cè)分學(xué)科第二次模擬考試 地理試卷(含答案詳解)
- 2024年度天津市公共營(yíng)養(yǎng)師之三級(jí)營(yíng)養(yǎng)師模擬試題(含答案)
- 2024年度四川省公共營(yíng)養(yǎng)師之三級(jí)營(yíng)養(yǎng)師題庫(kù)檢測(cè)試卷A卷附答案
- 2024年度四川省公共營(yíng)養(yǎng)師之二級(jí)營(yíng)養(yǎng)師考試題庫(kù)
- 桿菌多肽行業(yè)市場(chǎng)發(fā)展及發(fā)展趨勢(shì)與投資戰(zhàn)略研究報(bào)告
- 2024-2025學(xué)年新疆省克孜勒蘇柯爾克孜自治州三年級(jí)數(shù)學(xué)第一學(xué)期期末統(tǒng)考試題含解析
- 隱患排查治理管理規(guī)定
- 2025材料供貨合同樣本
- 2025版國(guó)家開放大學(xué)法學(xué)本科《國(guó)際私法》歷年期末紙質(zhì)考試總題庫(kù)
- 機(jī)器人機(jī)構(gòu)學(xué)基礎(chǔ) 部分習(xí)題及答案(于靖軍 )
- 教科版2022-2023學(xué)年度上學(xué)期三年級(jí)科學(xué)上冊(cè)期末測(cè)試卷及答案(含八套題)
- DZ/T 0430-2023 固體礦產(chǎn)資源儲(chǔ)量核實(shí)報(bào)告編寫規(guī)范(正式版)
- 銅排載流量表
- 工程掛靠協(xié)議書模板
- 上海1933老場(chǎng)坊項(xiàng)目市場(chǎng)調(diào)研分析報(bào)告
- 龍門式數(shù)控火焰切割機(jī)橫向進(jìn)給系統(tǒng)的設(shè)計(jì)畢業(yè)設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論