第13講 指針定義和引用_第1頁
第13講 指針定義和引用_第2頁
第13講 指針定義和引用_第3頁
第13講 指針定義和引用_第4頁
第13講 指針定義和引用_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

第15講指針定義和引用一、指針和地址的概念1.內(nèi)存與地址2.指針和指針變量3.對內(nèi)存單元的訪問方式二、指針的運算1.指針變量的定義2.指針運算符3.指針變量的初始化4.指針的運算三、指針變量作為函數(shù)參數(shù)1.內(nèi)存與地址存儲單元:存放一個字節(jié)數(shù)據(jù)的存儲器。存儲單元的內(nèi)容:存儲單元內(nèi)的數(shù)據(jù)。內(nèi)存地址:存儲單元的編號。一、指針和地址的概念···

···2007200320022000x=10;y=‘a(chǎn)’;z=9.8;2字節(jié)1字節(jié)4字節(jié)a109.8intx;chary;floatz;例:2.指針和指針變量指針:就是變量的內(nèi)存地址,是一個常量。指針變量:就是存放變量內(nèi)存地址的變量。變量的指針:變量的地址。當把某個變量x的地址存入指針變量p后,我們就說這個指針變量p的指針指向該變量x。3.對內(nèi)存單元的訪問方式:直接訪問方式:通過變量名訪問。間接訪問方式:通過變量的指針訪問。1.指針變量的定義格式:

類型說明符*指針變量名1,···;

例:

int*p1,*p2;說明:1)指針變量的名是p1和p2

若寫成:int*p1,p2;

則p2被定義為整型變量而非整型指針變量。二、指針的運算格式:類型說明符*指針變量名1,···;

例:

int*p1,*p2;說明:

2)指針變量的類型是定義時所規(guī)定的指向變量的類型,如p1、p2只能指向整型變量,不能指向?qū)嵭秃妥址妥兞?。格式:類型說明符*指針變量名1,···;

例:

int*p1,*p2;說明:

3)指針變量的值表示的是它所指向變量的地址。若一個指針變量為0(NULL),表示該指針為空,說明它沒有指向任何變量(存儲單元)。2.指針運算符取地址運算符──

“&”指針運算符──“*”取地址運算符──“&”作用:取變量的地址。例:inti,*p1;p1=&i;

注意:不能對常量、表達式進行”&”運算。例:下列運算為非法的。p2=&68;p3=&(i+1);&運算符返回操作對象的內(nèi)存地址。指針變量通過&的賦值語句,指向該操作對象。例:

p1=&i;

/*將i的地址賦給指針變量p1*/

p2=&chr;

/*將chr的地址賦給指針變量p2*/

p1p2chri賦值之后指針P2指向了字符型變量chr賦值之后指針P1指向了整型變量i指針運算符──“*”作用:取指針所指向的地址空間的內(nèi)容,即取指針所指向的變量的值。

例:

inti=100,*p1;p1=&i;printf(“%d\n”,*p1);*運算符間接地存取指針變量所指向的變量的值例:p1=&i;

/*將i的地址賦給指針變量pi*/

*p1=10;

/*把10存入p1所指的地址(&i)中*/

等同于語句:i=10;

ip1*p110&i例

指針運算符的使用main()

{inta=50,*p;

/*聲明整型指針變量p*/

p=&a;

printf("*p=%d,p=%x\n",*p,p);

/*取指針p所指地址的值*/

*p=100;

printf("a=%d,&a=%x\n",a,&a);

}程序運行結(jié)果:*p=50,p=ffea=100,a=ffe例

指針運算符的使用#include"stdio.h"main(){int*p1,*p2,x1,x2;scanf("%d%d",&x1,&x2);p1=&x1;p2=&x2;printf("*p1=%d,*p2=%d\n",*p1,*p2);p2=p1;printf("*p1=%d,*p2=%d\n",*p1,*p2);}輸入:12輸出:*p1=1,*p2=2*p1=1,*p2=1例&和*的混合運用&和*兩個運算符的優(yōu)先級相同,當混合使用時,按自右而左的順序進行運算定義:inta,b;int*p1,*p2;有:p1=&a;p2=&b;p2=&*p1;P1&aP2&bab&a&b3.指針變量的初始化格式類型說明符*指針變量名1=初始地址值,···;注意:指針變量在使用前必須要有確定的值,即指向一個變量。例:

inti,*ptr1=&i;float*f1=0,*f2=NULL;4.指針的運算實質(zhì):地址的運算。類型:指針賦值運算:賦地址運算。指針算術運算:指針加(減)一個整數(shù)運算。兩個指針相減運算。指針關系運算:兩個指針比較運算。指針賦值運算:賦地址運算例交換兩個指針所指向變量的值。

main(){int*p1,*p2,x1=10,x2=20,t;p1=&x1;p2=&x2;printf("*p1=%d,*p2=%d\n",*p1,*p2);t=x1;x1=x2;x2=t;printf("*p1=%d,*p2=%d\n",*p1,*p2);printf("x1=%d,x2=%d\n",x1,x2);}程序運行結(jié)果:*p1=10,*p2=20*p1=20,*p2=10

x1=20,x2=10例兩個指針變量交換指向。main(){int*p1,*p2,*s;intx1=10,x2=20;p1=&x1;p2=&x2;printf("*p1=%d,*p2=%d\n",*p1,*p2);s=p2;p2=p1;p1=s;printf("*p1=%d,*p2=%d\n",*p1,*p2);}程序運行結(jié)果:*p1=10,*p2=20*p1=20,*p2=10

算術運算:移動指針移動指針:對指針變量進行加上或減去一個整數(shù)、或通過賦值運算,使指針變量指向相鄰的存儲單元。指針移動是以它指向的數(shù)據(jù)類型所占的字節(jié)數(shù)為移動單位。只有當指針指向一串連續(xù)的存儲單元時,指針的移動才有意義。才可以將一個指針變量與一個整數(shù)n做加減運算。例:

main(){inta[10]={0,1,2,3,4,5,6,7,8,9};intn=6,*p1,*p2;p1=p2=a;printf("*p1=%d,*p2=%d\n",*p1,*p2);p1=p1+n;p2++;printf("*p1=%d,*p2=%d\n",*p1,*p2);

程序運行結(jié)果:1)*p1=0,*p2=02)*p1=6,*p2=1--p1;p1=p1-4;n=p1-p2;printf(“3)*p1=%d,*p2=%d,n=%d\n",*p1,*p2,n);}程序運行結(jié)果:3)*p1=1,*p2=1,n=0兩個指針的比較運算兩個指針的比較運算經(jīng)常用于數(shù)組,以判斷兩個指針所指數(shù)組元素位置的先后。例:若pi<pj,則pi所指的地址在pj所指的地址之前。若pi>pj,則pi所指的地址在pj所指的地址之后。若pi==pj,則pi所指的地址與pj所指的地址相同。若pi!=pj,則pi所指的地址與pj所指的地址不同。三、指針變量作為函數(shù)參數(shù)在C語言中,函數(shù)參數(shù)可以是指針類型。當指針變量作函數(shù)參數(shù),其作用是將一個變量的地址傳送到另一個函數(shù)中。過程為:形參從實參獲得了變量的地址,即形參和實參指向同一個變量,當形參指向的變量發(fā)生變化時,實參指向的變量也隨之變化。指針作為函數(shù)參數(shù)舉例:swap(int*x,int*y)

{inttemp;

temp=*y;*y=*x;*x=temp;

/*改變形參所指向變量的值*/}

main()

{inta=10,b=20;

printf("1)a=%d,b=%d\n",a,b);s);

printf("2)a=%d,b=%d\n",a,b);

}程序運行結(jié)果:1)a=10,b=202)a=20,b=10說明如下:1)主函數(shù):定義變量a、b。并初始化2)主函數(shù):調(diào)用swap(),將實參的值(地址)傳遞給形參,使得形參x,y分別指向?qū)崊,b。3)swap()函數(shù):交換形參*x、*y的值。即a,b的值。ab1020&axy&btemp*y=b*x=a202010102020例交換兩個元素的值swap(int*x,int*y)

{int*p;

p=x;x=y;y=p;/*改變形參的值*/

}

main()

{inta=10,b=20;int*p1=&a,*p2=&b;

printf("1)a=%d,b=%d\n",a,b);swap(p1,p2);

printf("2)a=%d,b=%d\n",a,b);

}程序運行結(jié)果:1)a=10,b=202)a=10,b=20說明如下:ab1020p1p2&a&byx&a&b&a&b&a1)主函數(shù):定義變量a、b,并初始化。2)主函數(shù):定義指針變量p1、p2,并初始化。使得p1,p2分別指向a,b。3)主函數(shù):調(diào)用swap(),將實參的值(地址)傳遞給形參,使得形參x,y分別指向變量a,b。4)swap()函數(shù):交換形參x、y的值—地址。使得x、y的指向發(fā)生改變,由于實參對形參是單向傳遞,因此,形參的變化對實參沒有影響。例交換兩個元素的值。swap(int*x,int*y)

{int*p;

*p=*x;/*指針p未賦值*/*x=*y;*y=*p;}

main()

{inta=10,b=20;

swap(&a,&b);

printf("a=%d,b=%d\n",a,b);

}例用選擇法將任意10個整數(shù)按從大到小順序排序。main(){int*p,i,a[10];for(i=0;i<10;i++)

scanf("%d",a+i);

p=a;

sort(p,10);

for(i=0;i<10;i

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論