計算機程序設(shè)計基礎(chǔ)-第九講指針_第1頁
計算機程序設(shè)計基礎(chǔ)-第九講指針_第2頁
計算機程序設(shè)計基礎(chǔ)-第九講指針_第3頁
計算機程序設(shè)計基礎(chǔ)-第九講指針_第4頁
計算機程序設(shè)計基礎(chǔ)-第九講指針_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

指針是C語言中的一個重要概念。掌握指針的用

法,可使程序簡潔、高效、靈活,但并不難學(xué)。

為了了解什么是指針,先看一個小故事

地下工作者阿金接到上級指令,要去尋找打開

密電碼的密鑰,這是一個整數(shù)。幾經(jīng)周折,才探知

如下線索,密鑰藏在一棟三年前就被貼上封條的小

樓中。一個風雨交加的夜晚,阿金潛入了小樓,房

間很多,不知該進哪一間,正在一籌莫展之際,忽

然走廊上的電話鈴聲響起。藝高人膽大,阿金毫不

遲疑,抓起聽筒,一個陌生人說:“去打開211房

間,那里有線索”。阿金疾步上樓,打開211房間,

用電筒一照,只見桌上赫然6個大字:地址1000。

阿金眼睛一亮,迅速找到1000房間,取出重要數(shù)據(jù)

66,完成了任務(wù)。2

我們畫出下圖

pI---------

1000???66???

2111000

1、數(shù)據(jù)藏在一個內(nèi)存地址單元中,地址是1000。

2、地址1000又由P單元所指認,P單元的地址為211。

3、66的直接地址是1000;66的間接地址是211;211中

存的是直接地址1000。

4、稱P為指針變量,1000是指針變量的值,實際上是有

用數(shù)據(jù)藏在存儲器中的地址。3

指針變量——用來存放另一變量地址的變量

變量的指針就是變量的地址。

1、指針的概念

指針是一種特殊的變量,特殊性表現(xiàn)在類型和值上。

從變量講,指針也具有變量的三個要素:

>(1)變量名,這與一般變量取名相同,由英文字符開始。

>(2)指針變量的類型,是指針所指向的變量的類型,而不

是自身的類型。

>(3)指針的值是某個變量的內(nèi)存地址。

從上面的概念可知,指針本身類型是int型,因為任何內(nèi)存地

址都是整型的。但是指針變量的類型卻定義成它所指向的

變量的類型。

2、指針的定義(說明,先說明后引用)

例如:

int*q;//定義p,q為指向整數(shù)類型變量的指針

float*point;//定義point為指向float型變量的指針

double*pd;//定義pd為指向double型數(shù)組的指針

intrpa)[10];//定義pa為指向int型數(shù)組的指針

intCpu)0;//定義pu為指向int型函數(shù)的指針

int**qq;//定義qq為指向int型指針的指針

還有指向結(jié)構(gòu)、聯(lián)合的指針,后面再介紹

3、指針賦值

intakey;//定義一個整型變量akey

int*p,*q;//定義P,q為指向整型變量的指針變量

akey=66;//將變量a的地址賦給p,這時見圖1

q=P;//將P的值賦給q,見圖2

p

&a66

圖1

&P

P變量的地址a變量的地址

圖1的說明:將a變量的地址賦給指針p,意味著讓指針

p指向a

6

p

/&a------------166

~~Sip

/圖2

q=p;I

&q

圖2的說明:當著執(zhí)行q=p;之后,p中所存的a變量的

地址值,也就被放到q變量中,意味著讓指

針q也指向a

7

〃指針1.C

#include<stdio.h>//預(yù)編譯命令

voidmain()〃主函數(shù)

(//函數(shù)體開始

inta[5]={0,l,2,3,4};〃定義數(shù)組,賦初值

int*pl,*p2;//定義指針變量

pl=&a[l];//賦值給指針變量,讓pl指向a[l]

p2=&a[2];//賦值給指針變量,讓pl指向a[2]

printf(na[l]=%d;a[2]=%d\nfVpl,*p2);〃輸出a[l]和a[2]的值

}

說明:見圖

01234

&a[0]&a[l]&a[2]&a[3]&a[4]

&a[l]][&a[2]

&pl&p2▼

pl和p2分別指向a[l]閨2];這里

>&——取地址運算符

>*——指針運算符(間接訪問運算符)

>*pl——間接訪問pl所指向的內(nèi)存單元,當然是輸出a[l]的值

>*p2——間接訪問p2所指向的內(nèi)存單元,當然是輸出a[2]的值

4、向指針所指向的內(nèi)存單元賦值

//指針2.c

#include<stdio.h>//預(yù)編譯命令

voidmainQ〃主函數(shù)

〃函數(shù)體開始

intakey,b;〃定義整型變量

int*p,*q;〃定義指針變量

akey=66;〃賦值給變量akey

p=&akey;〃賦值給指針變量p,讓p指向變量akey

q=&b;〃賦值給指針變量q,讓q指向變量b

*q=*p;〃將P所指向的akey的值賦給q所指向的變量b

printf(Mb=%d\nn,b);〃輸出b的值

printf("*q=%d\n",*q);〃輸出b的值

卜〃函數(shù)體結(jié)束

10

p

&b

11

5、指針與數(shù)組

先看一個程序

//指針3.c

#include<stdio.h>〃預(yù)編譯命令

voidmain()〃主函數(shù)

//函數(shù)體開始

inta[5]={l,3,5,7,9};//定義數(shù)組,賦初值

int*p;〃定義指針變量

inti;//定義整型變量

P=a;//賦值給指針變量,讓p指向a數(shù)組

for(i=0;i<5;i=i+l)

{〃循環(huán)體開始

printf("a[%d]=%d\n"J,*p);//輸出a數(shù)組元素的值

P=P+1;〃指針變量加1

}//循環(huán)體結(jié)束

//函數(shù)體結(jié)束

}投

說明

>(l)p=a;這里數(shù)組名作為數(shù)組的起始地址,即a[0]的地址。

因此p=a等效于p=&a[O];

>(2)p=p+l;如p指向a[0],貝ljp=p+l之后,p指向a[l]

>(3)如果p=a等效于p=&a[O];

做下面的實驗

//指針4.c

#include<stdio.h>〃預(yù)編譯命令

voidmain()〃主函數(shù)

//函數(shù)體開始

inta[5]={l,3,5,7,9};//定義數(shù)組,賦初值

int*p;〃定義指針變量

inti=0;//定義整型變量,賦初值

for(p=a;p<a+5;p=p+1)//賦值給指針變量,讓p指向a數(shù)組

〃循環(huán)體開始

printf(na[%d]=%d\nn*p);〃輸出a數(shù)組元素的值

i=i+l;〃讓加1

}〃循環(huán)體結(jié)束

}//函數(shù)體結(jié)束

14

數(shù)組名是一個常量指針,指向該數(shù)組的首地址,例

//指針5.c

#include<stdio.h>

voidmain()

char*p;〃定義指向字符類型的指針變量p

staticchars[]="abcdefgh”;//定義字符數(shù)組,并賦值

p=s;〃數(shù)組名是一個常量指針,

〃它指向該數(shù)組首地址,

while(*p!=,\(F)//當p所指向的數(shù)組元素不為八(F時

{

p=p+l;〃讓指針加1

}

printf(“字串長度為%d\n”,p.s);〃輸出字串長

}

15

012345678

abCd°fgh\0

sP

圖中數(shù)組的首地址是s[0]的地址,即&s[0]。s可看

作是指向s[0]的指針。s是不會動的,是常量指

針。

數(shù)組名是一個常量指針,指向該數(shù)組的首地址,例

//指針6.c

#include<stdio.h>//預(yù)編譯命令

voidmain()〃主函數(shù)

//函數(shù)體開始

staticcharshuzi[]="987654321”;〃定義數(shù)組,

〃賦初值為數(shù)字字符串

char*p=&shuzi[8];//讓指針p指向shuzi[8]元素,

〃該處是字符

do〃直到型循環(huán)

〃循

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論