第11講 指針基礎(chǔ)_第1頁
第11講 指針基礎(chǔ)_第2頁
第11講 指針基礎(chǔ)_第3頁
第11講 指針基礎(chǔ)_第4頁
第11講 指針基礎(chǔ)_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1第11講指針(1)

----指針的定義、指針與數(shù)組主講教師:劉輝email:liuhui@phone:87935400(office)22主要內(nèi)容指針與函數(shù)(1)4指針的概念1指針變量的定義與使用2重點(diǎn)指針變量的定義與使用難點(diǎn)指針與數(shù)組的關(guān)系本講小結(jié)第8章8.1-8.38.5部分指針與數(shù)組331指針的概念(1)1.1變量與地址

數(shù)據(jù)在內(nèi)存中(計(jì)算機(jī)中)是如何存儲(chǔ)的?…...…...2000200120022005內(nèi)存02003內(nèi)存單元的編號(hào)叫地址程序中:inti; floatk;

編譯或函數(shù)調(diào)用時(shí)為其分配內(nèi)存單元ik★變量是對(duì)程序中數(shù)據(jù)存儲(chǔ)空間的抽象41指針的概念(2)1.2指針和地址內(nèi)存單元的編號(hào)叫做地址。通常也把這個(gè)地址稱為指針。在C語言中,允許用一個(gè)變量來存放指針(即地址值),這種變量稱為指針變量指針是C語言的一種數(shù)據(jù)類型,指針類型變量是用于存放另一個(gè)變量地址的變量。51指針的概念(3)1.3變量的直接訪問和間接訪問…...…...200020042006200510指針變量p2001200220032000變量的內(nèi)容程序代碼:inti;…i=10;整型變量i如果將變量i的地址存放到變量p中,通過訪問p,間接達(dá)到訪問i的目的,稱為間接訪問,變量p是一個(gè)指針變量通過變量名訪問數(shù)據(jù)的方式,稱為直接訪問61指針的概念(4)1.4地址和指針變量一個(gè)指針是一個(gè)地址,是一個(gè)常量。而一個(gè)指針變量卻可以被賦予不同的指針值,是變量。指針雖然實(shí)際上也是一個(gè)地址,但它卻是一個(gè)數(shù)據(jù)結(jié)構(gòu)的首地址,它是“指向”一個(gè)數(shù)據(jù)結(jié)構(gòu)的,因而概念更為清楚,表示更為明確。這也是引入“指針”概念的一個(gè)重要原因。返回主菜單72指針變量的定義與使用(1)2.1指針變量的定義類型說明符*變量名;指針變量所指向的變量的數(shù)據(jù)類型指針變量名*表示這是一個(gè)指針變量定義一類型為int的指針變量,變量名為pt定義一類型為char的指針變量,變量名為cpint*pt;char*cp;82指針變量的定義與使用(2)2.2指針變量的賦值指針變量的賦值只能賦予地址地址運(yùn)算符&來表示變量的地址變量地址表示的一般形式為:&變量名;如有下面的定義,請(qǐng)將變量i和c的地址賦值給定義中的指針變量:inti,*pt;charc,*cp;pt=&i;cp=&c;92指針變量的定義與使用(3)2.3指針變量的初始化在指針變量定義時(shí)同時(shí)為它賦初值inta;int*p=&a;如何由變量p得到p指針指向的變量的值?102指針變量的定義與使用(4)2.4*運(yùn)算符和&運(yùn)算符…...…...2000200420062005整型變量i變量i_pointer200120022003inti;int*i_point;取地址運(yùn)算符&i_point=&i;如何給i_point變量賦值?102000112指針變量的定義與使用(5)2.4*運(yùn)算符和&運(yùn)算符(續(xù))變量i_pointer…...…...2000200420062005整型變量i10200120022003如何用i_point變量讀取變量i的值?2000*間接訪問運(yùn)算符j=*i_point;整型變量j取變量i_point所指向的變量的值賦給變量j10122指針變量的定義與使用(6)2.4*運(yùn)算符和&運(yùn)算符(續(xù))例1:分析程序的運(yùn)行結(jié)果main(){inta,b;int*pointer_1,*pointer_2;a=100;b=10;pointer_1=&a;pointer_2=&b;printf("%d,%d\n",a,b);printf("%d,%d\n",*pointer_1,*pointer_2);}abpointer_1pointer_210010&a&b運(yùn)行結(jié)果:100,10100,10132指針變量的定義與使用(7)2.4*運(yùn)算符和&運(yùn)算符(續(xù))例1:分析程序的運(yùn)行結(jié)果(續(xù))如果已經(jīng)執(zhí)行了“pointer_1=&a;”語句,則①&*pointer_1是什么含義?②*&a含義是什么?③(*pointer_1)++和*pointer_1++的區(qū)別?

142指針變量的定義與使用(8)2.4*運(yùn)算符和&運(yùn)算符(續(xù))

main(){inta,b;int*p1,*p2,*p;scanf("%d,%d",&a,&b);p1=&a;p2=&b;if(a<b){p=p1;p1=p2;p2=p;}printf("\na=%d,b=%d\n\n",a,b);printf("max=%d,min=%d\n",*p1,*p2);}例2:分析程序的運(yùn)行結(jié)果輸入為5,9p1p2pab⑤⑤⑥⑥⑥輸出:a=5,b=9max=9,min=5返回主菜單153指針與數(shù)組(1)一個(gè)變量有一個(gè)地址,一個(gè)數(shù)組包含若干元素,每個(gè)數(shù)組元素都在內(nèi)存中占用存儲(chǔ)單元,它們都有相應(yīng)的地址。數(shù)組的指針是指數(shù)組的起始地址數(shù)組元素的指針是數(shù)組元素的地址

163指針與數(shù)組(2)3.1指針與一維數(shù)組array[0]array[1]array[2]array[3]array[9]...整型指針p&array[0]p數(shù)組名就是這塊連續(xù)內(nèi)存單元的首地址array一個(gè)數(shù)組元素的首地址也是指它所占有的幾個(gè)內(nèi)存單元的首地址如何定義一個(gè)指向數(shù)組(元素)的指針?173指針與數(shù)組(3)3.1指針與一維數(shù)組(續(xù))array[0]array[1]array[2]array[3]array[9]...整型指針p&array[0]p或

int*p=&array[0];或int*p=array;例:intarray[10];int*p;與其他定義指針變量的方法沒有區(qū)別p=&array[0];//p=array;把數(shù)組array的首地址賦給指針變量如何為p賦值?183指針與數(shù)組(4)3.2指針的運(yùn)算--賦值運(yùn)算在如下定義基礎(chǔ)上,分析下面賦值表達(dá)式的含義:

inta,array[10];int*p;int*p1=&a,*p2=array;p=&a;p=array;p=&array[i];p1=p2;

(將變量a地址p)(將數(shù)組array首地址p)(將數(shù)組元素地址p)(指針變量p2值p1)注意:不能把一個(gè)整數(shù)p,也不能把p的值整型變量如

inti,*p;

p=1000;

()

i=p;

()193指針與數(shù)組(5)3.2指針的運(yùn)算—指向數(shù)組的指針的算術(shù)運(yùn)算pipid(i為整型數(shù),d為p指向的變量所占字節(jié)數(shù))p++,p--,p+i,p-i,p+=i,p-=i若p1與p2指向同一數(shù)組,p1-p2=兩指針間元素個(gè)數(shù)(p1-p2)/d;p1+p2無意義203指針與數(shù)組(6)3.2指針的運(yùn)算—關(guān)系運(yùn)算若p1和p2指向同一數(shù)組,則p1<p2p1>p2p1==p2表示p1指的元素在前表示p1指的元素在后表示p1與p2指向同一元素若p1與p2不指向同一數(shù)組,比較無意義213指針與數(shù)組(7)3.3一維數(shù)組元素的表示方法a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]a數(shù)組若有定義inta[10];int*p=a;分析下面表達(dá)式的含義:a[i], &a[i],*(a+i), a+i,*(p+i), p+ia[i]*(a+i)*(p+i)&a[i]a+ip+i223指針與數(shù)組(8)3.4通過指針引用數(shù)組元素

main(){inta[10];inti;for(i=0;i<10;i++)scanf("%d",&a[i]);printf("\n");for(i=0;i<10;i++)printf("%d",a[i]);}例3:考慮使用指針變量訪問數(shù)組int*p=ascanf("%d",a+i);

scanf("%d",p+i);printf("%d",*(a+i));

printf("%d",*(p+i));如果不用變量i,是否可以完成程序?233指針與數(shù)組(9)3.4通過指針引用數(shù)組元素(續(xù))—例3說明指針變量可以實(shí)現(xiàn)本身的值的改變。如p++是合法的;而a++是錯(cuò)誤的。因?yàn)閍是數(shù)組名,它是數(shù)組的首地址,是常量。*p++,由于++和*同優(yōu)先級(jí),結(jié)合方向自右而左,等價(jià)于*(p++)*(p++)與*(++p)作用不同。若p的初值為a,則*(p++)等價(jià)a[0],*(++p)等價(jià)a[1]3.5指針與二維數(shù)組inta[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};243指針與數(shù)組(10)1357911131517192123aa+1a+2a[0]a[0]+1a[0]+2a[0]+33指針與數(shù)組(11)25#include<stdio.h>intmain(){inta[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};

printf("%d,%d\n",a,*a);printf("%d,%d\n",a[0],*(a+0));printf("%d,%d\n",&a[0],&a[0][0]);printf("%d,%d\n",a[1],a+1);printf("%d,%d\n",&a[1][0],*(a+1)+0);printf("%d,%d\n",a[2],*(a+2));printf("%d,%d\n",&a[2],a+2);printf("%d,%d\n",a[1][0],*(*(a+1)+0));printf("%d,%d\n",*a[2],*(*(a+2)+0));}1357911131517192123輸出值均為數(shù)組的首地址第1行首地址第1行第0列首地址263指針與數(shù)組(12)3.5指針與二維數(shù)組例4:分析程序的運(yùn)行結(jié)果#include<stdio.h>voidmain(){inta[3][4]={{2,4,6,8},{10,12,14,16},{18,20,22,24}};inti,*ip,(*p)[4];

p=a+1;ip=p[0];for(i=1;i<=4;ip+=2,i++)printf("%d\t",*ip);printf("\n");

p=a;for(i=0;i<2;p++,i++)printf("%d\t",*(p[i]+1));printf("\n");}24222018161412108642aa+1a+2返回主菜單pp指向連續(xù)4個(gè)數(shù)的首地址;ip為p[0],即數(shù)值10的地址

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論