《C語(yǔ)言程序設(shè)計(jì)》課件第6章_第1頁(yè)
《C語(yǔ)言程序設(shè)計(jì)》課件第6章_第2頁(yè)
《C語(yǔ)言程序設(shè)計(jì)》課件第6章_第3頁(yè)
《C語(yǔ)言程序設(shè)計(jì)》課件第6章_第4頁(yè)
《C語(yǔ)言程序設(shè)計(jì)》課件第6章_第5頁(yè)
已閱讀5頁(yè),還剩56頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

6.1指針的基本概念

6.2指針變量的運(yùn)算

6.3指針與數(shù)組6.4指針與字符串小結(jié)習(xí)題實(shí)訓(xùn)

6.1.1什么是指針

在計(jì)算機(jī)中,所有的數(shù)據(jù)都是存放在存儲(chǔ)器中的。

6.1.2指針的定義及初始化

和一般變量一樣,對(duì)指針變量的類型說(shuō)明也包括三個(gè)方面的內(nèi)容:指針類型說(shuō)明、指針變量名和變量值(指針)所指向的變量的數(shù)據(jù)類型。6.1指針的基本概念1.指針變量的聲明

2.指針變量的初始化

6.1.3指針運(yùn)算符

指針有兩種運(yùn)算符:一是取變量地址的操作運(yùn)算符“&”;另一個(gè)是間接訪問(wèn)操作運(yùn)算符“*”。

【例6-1】

指針的運(yùn)算。

通過(guò)輸出語(yǔ)句可以看到,指針變量pa取得了整型變量a的地址,與&a的值相同,而?*pa取得的是變量a的值,與a的值相同,而且可以重新為變量a賦值。該例子還說(shuō)明“*”

運(yùn)算符不僅可以獲得變量a的值,而且可以修改變量a的值。程序的運(yùn)行結(jié)果如圖6-1所示。圖6-1例6-1程序的運(yùn)行結(jié)果

6.1.4程序案例

【例6-2】用指針實(shí)現(xiàn)兩個(gè)數(shù)據(jù)的交換。要求從鍵盤上輸入兩個(gè)數(shù),輸出交換后的兩個(gè)數(shù)。

實(shí)現(xiàn)數(shù)據(jù)交換的程序總是類似的,需要一個(gè)中間變量。本例中,當(dāng)給第一個(gè)數(shù)num1賦值20,給第二個(gè)數(shù)num2賦值40時(shí),程序的運(yùn)行結(jié)果如圖6-2所示。圖6-2例6-2程序的運(yùn)行結(jié)果

【例6-3】

用指針求出三個(gè)數(shù)中最大的。要求從鍵盤上輸入三個(gè)整數(shù),輸出此三個(gè)數(shù)中的最大數(shù)。

當(dāng)輸入的三個(gè)數(shù)分別是12、-45、23時(shí),程序運(yùn)行后輸出的最大數(shù)為23。程序的運(yùn)行結(jié)果如圖6-3所示。圖6-3例6-3程序的運(yùn)行結(jié)果6.2.1賦值運(yùn)算

賦值運(yùn)算有以下幾種形式:

(1)指針變量初始化賦值。

(2)把一個(gè)變量的地址賦予指向相同數(shù)據(jù)類型的指針變量。

(3)把一個(gè)指針變量的值賦予指向相同類型變量的另一個(gè)指針變量。6.2指針變量的運(yùn)算

(4)把數(shù)組的首地址賦予指向數(shù)組的指針變量。

(5)把字符串的首地址賦予指向字符類型的指針變量。

6.2.2算術(shù)運(yùn)算

1.兩指針變量相減

兩指針變量相減所得之差是兩個(gè)指針?biāo)笖?shù)組元素之間相差的元素個(gè)數(shù)。

2.使用?++/--?將指針遞增或遞減

6.2.3指針變量的關(guān)系運(yùn)算

兩個(gè)指針變量在有意義的情況下,可以進(jìn)行關(guān)系運(yùn)算。

指針變量還可以與0進(jìn)行比較。設(shè)p為指針變量,則p==0表明p是空指針,它不指向任何變量;p!=0表示p不是空指針??罩羔樖怯蓪?duì)指針變量賦予0值而得到的。6.3.1指向數(shù)組的指針

指向數(shù)組的指針變量稱為數(shù)組指針變量,它可以指向數(shù)組的首地址,也可以指向數(shù)組中的某個(gè)元素。6.3指?針?與?數(shù)?組6.3.2數(shù)組指針變量說(shuō)明的一般形式

數(shù)組指針變量說(shuō)明的一般形式為:

類型說(shuō)明符*指針變量名;

其中,類型說(shuō)明符表示所指數(shù)組的類型。6.3.3程序案例

【例6-4】使用指針變量為數(shù)組賦值并輸出數(shù)組元素的值。

程序的運(yùn)行結(jié)果如圖6-4所示。圖6-4例6-4程序的運(yùn)行結(jié)果

【例6-5】使用指針求出數(shù)組中最大元素的值。

運(yùn)行程序時(shí),順序輸入12,89,23,45,65五個(gè)數(shù),輸出正確的結(jié)果:數(shù)組中的最大值是89,如圖6-5所示。比較用指針和用數(shù)組的編程方法可看出,它們是很相似的。圖6-5例6-5程序的運(yùn)行結(jié)果

【例6-6】

使用指針對(duì)數(shù)組中的元素按從小到大的順序排序,即使用指針實(shí)現(xiàn)冒泡排序。

程序的運(yùn)行結(jié)果如圖6-6所示。圖6-6例6-6程序的運(yùn)行結(jié)果6.4.1字符指針

我們已經(jīng)知道,字符串實(shí)際上就是字符數(shù)組,所以指向字符串的指針就是指向字符數(shù)組的指針,通過(guò)指向數(shù)組的指針的偏移可以遍歷字符數(shù)組即字符串中的各個(gè)字符。6.4指針與字符串

【例6-7】

使用字符指針求給出的字符串長(zhǎng)度。

程序定義了字符串指針變量msg,并初始化為“EverythingIdo,Idoitforyou!”;定義了計(jì)數(shù)器count,并賦初值為0;還定義了一個(gè)指向字符串的指針變量prt。程序運(yùn)行結(jié)果輸出了字符串的長(zhǎng)度,如圖6-7所示。該例實(shí)際上就是字符串長(zhǎng)度函數(shù)strlen的實(shí)現(xiàn)過(guò)程。圖6-7例6-7程序的運(yùn)行結(jié)果6.4.2字符指針數(shù)組

要集中處理多個(gè)字符串,如人員名單,可以用二維字符數(shù)組來(lái)實(shí)現(xiàn)。

【例6-8】使用字符指針數(shù)組來(lái)輸出指針數(shù)組中各元素指向的內(nèi)容。

程序的運(yùn)行結(jié)果如圖6-8所示,輸出了給定的字符串序列。圖6-8例6-8程序的運(yùn)行結(jié)果6.4.3程序案例

【例6-9】輸入一個(gè)字符串,使用字符指針遍歷字符串,統(tǒng)計(jì)出字符串中大寫字母的個(gè)數(shù)。

當(dāng)輸入字符串?"TheBigBigWorld!"?后運(yùn)行程序,其結(jié)果如圖6-9所示。圖6-9例6-9程序的運(yùn)行結(jié)果

【例6-10】判斷一個(gè)字符串是否是回文串,也就是說(shuō)字符串是否是對(duì)稱的。

如果輸入的是字符數(shù)組,則最多可輸入Max個(gè)字符;如果輸入的是字符串,則最多只能輸入Max-1個(gè)字符,但strlen()取的是字符串的實(shí)際長(zhǎng)度。程序的運(yùn)行結(jié)果如圖6-10所示。圖6-10例6-10程序的運(yùn)行結(jié)果

【例6-11】要求輸入用戶居住的城市的拼音,如果輸入的是“Xi’an”,則輸出“歡迎你,鄉(xiāng)黨!”,否則輸出“西安歡迎你!”。

程序根據(jù)用戶的輸入,通過(guò)字符串比較函數(shù)輸出不同的信息。程序運(yùn)行結(jié)果如圖6-11所示。圖6-11例6-11程序的運(yùn)行結(jié)果

指針是一個(gè)變量,所以它的聲明、引用及初始化與普通變量是相似的,只不過(guò)它存儲(chǔ)的是另一個(gè)變量的地址。指針變量的類型與它指向的變量的類型一致?!拘〗Y(jié)】一、填空題

1.若有定義:inta[]={12,23,34,45,56},*p=a;,則:*(p+1)的值是

,*(a+1)的值是

。

2.下列程序段的運(yùn)行結(jié)果是

。

【習(xí)題】main()

{

inta=8,b=9,*p=&a,*q=&b,*t;

t=p;p=q;q=t;

printf("%d,%d,%d,%d\n",a,b,*p,*q);

}3.下列程序段的運(yùn)行結(jié)果是

。

intf(int*i,int*j){return*i+*j;}

main()

{

inta=3,b=6,c;

c=f(&a,&b);

printf("%d\n",c);

}4.下列程序段的運(yùn)行結(jié)果是

。

voidf(inti,int*j){i+=*j;*j+=i;}

main()

{

inta=3,b=6;

f(a,&b);

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

}5.下列函數(shù)的功能是

。

int*f(int*x,int*y)

{

if(*x<*y)

returnx;

returny;

}6.下列程序段的運(yùn)行結(jié)果是

。

main()

{

inta[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],*q=p+2;

printf("%d\n",*p+*q);

}7.下列程序段的運(yùn)行結(jié)果是

。

main()

{

inta[10]={1,2,3,4,5,6,7,8,9,10},s=0;

for(inti=0;i<9;i+=2)

s+=*(a+i);

printf("%d\n",s);

}8.下列程序段的運(yùn)行結(jié)果是

。

main()

{

inta[2][5]={1,2,3,4,5,6,7,8,9,10},*p=a[0];

printf("%d\n",*(p+3));

}

9.若正常執(zhí)行如下語(yǔ)句后,輸出結(jié)果是

inta[20],*p1=a,*p2=&a[13];

printf(“%d\n”,p2-p1);

10.p為一個(gè)指針變量,將p所指向單元的數(shù)據(jù)值減1并作為表達(dá)式的值的表達(dá)式是

11.若指針p指向字符串“ABCDEFGHIJKLMN”,則執(zhí)行語(yǔ)句printf("%c\n",*(p+7));后,屏幕上顯示的是

。二、選擇題

1.()提供了一種直接操作內(nèi)存地址的變量。

A.數(shù)組 B.字符串

C.指針 D.變量

2.下面聲明一個(gè)指向變量num的指針prt的語(yǔ)句中,正確的是()。

A.?intnum,*ptr;

ptr=num;

B.?intnum,*ptr;

ptr=*num;

C.?intnum,*ptr;

*ptr=#

D.?intnum,*ptr;

ptr=#

3.已知語(yǔ)句片段:

doublenum,*ptr;

ptr=#

則與*ptr相同的是()。

A.?num B.?&num

C.?*num D.?ptr

4.已知:

intdata[]={12,23,34,45},*ptr=data;

下面對(duì)data數(shù)組元素的值引用不正確的是()。

A.?*(ptr+2) B.?*ptr

C.?ptr++ D.?data[3]

5.下列說(shuō)法正確的是()。

A.在2000,2001,…,2007這8個(gè)連續(xù)的地址單元中可存放8個(gè)數(shù)據(jù)

B.在2000,2001,…,2007這8個(gè)連續(xù)的地址單元中可存放8個(gè)字符

C.在2000,2001,…,2007這8個(gè)連續(xù)的地址單元中可存放字符串“ABCDEFGH”

D.在2000,2001,…,2007這8個(gè)連續(xù)的地址單元中可存放8個(gè)整數(shù)

6.假定p是一個(gè)指針變量,下列指針表達(dá)式正確的是()。

A.?++p++ B.

(++p)++

C.?++(p++) D.

p++-=3

7.執(zhí)行下列程序片段后,變量x的值為()。

intdata[3][2]={{10,20},{1,2},{15,30}};

intx,*ptr;

ptr=&data[0][0];

x=*ptr*(*(ptr+3))*(*(ptr+5));

A.?150 B.?300

C.?600 D.?4008.以下程序的輸出結(jié)果是()。

#include<stdio.h>

voidmain()

{

inti=2,j=4,k=6;

int*pi=&i,*pj=&j,*pk;

*(pk=&k)=*pi**pj;

printf(“%d”,k);

}

A.?24 B.?12

C.?10 D.?89.下列程序執(zhí)行的結(jié)果是()。

voidmain()

{

inti=2,j=4,**pp,*p;

pp=&p;

p=&i;

p=&j;

printf(“%d,%d”,*p,**pp);

}

A.?2,4

B.?2,2

C.?4,4

D.4,210.下列程序執(zhí)行的結(jié)果是()。

voidmain()

{

char*pc=“Oneworld,onedream!”;

pc=pc+10;

printf(“%s”,pc);

}

A.?onedream! B.?“onedream!”

C.?onedream D.編譯出錯(cuò)

11.下列說(shuō)法不正確的是()。

A.一個(gè)數(shù)組的地址就是該數(shù)組的第一個(gè)元素(0號(hào)元素)的地址

B.地址0專用于表示空指針

C.地址值0可以用符號(hào)常量NULL表示

D.兩個(gè)指針相同是指它們的地址值相同

12.空指針是指()。

A.無(wú)指針值的指針

B.不指向任何數(shù)據(jù)的指針

C.無(wú)數(shù)據(jù)類型的指針

D.既無(wú)指針值又無(wú)數(shù)據(jù)類型的指針

13.下面是一個(gè)運(yùn)行正常的程序中的兩條語(yǔ)句:

int*p1=a,*p2=&x;

*p2=*b;

由此可知,變量a和b的類型分別是()。

A.int和int B.int*和int

C.int和int* D.int*和int*

14.要使指針變量p指向一維數(shù)組A的第5個(gè)元素(下標(biāo)為4),正確的賦值表達(dá)式是()。

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論