




版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 環(huán)保與生產(chǎn)計(jì)劃的有效結(jié)合
- 跨國(guó)公司如何應(yīng)對(duì)國(guó)際投資挑戰(zhàn)
- 2025Kubernetes 系統(tǒng)配置手冊(cè)
- 健康教育與心理輔導(dǎo)計(jì)劃
- 跨區(qū)域醫(yī)療項(xiàng)目投資與收益分析
- 超級(jí)市場(chǎng)多語(yǔ)言服務(wù)能力的提升
- 足球賽事的媒體管理與傳播策略
- 音樂(lè)、繪畫等不同類型藝術(shù)的學(xué)校教育現(xiàn)狀及未來(lái)趨勢(shì)分析
- 跨境商品選擇與品牌塑造
- 高效的辦公環(huán)境與財(cái)務(wù)管理技術(shù)
- 金屬工藝學(xué)(鑄造)課件
- DB23∕T 343-2003 國(guó)有林區(qū)更新造林技術(shù)規(guī)程
- 醫(yī)療廢物管理組織機(jī)構(gòu)架構(gòu)圖
- cjj/t135-2009《透水水泥混凝土路面技術(shù)規(guī)程》
- 短時(shí)耐受電流
- 社保人事專員績(jī)效考核表
- 河北省自然科學(xué)基金資助項(xiàng)目申請(qǐng)書模板
- 上海世博會(huì)對(duì)上海城市競(jìng)爭(zhēng)力影響的評(píng)估模型
- 河南書法家協(xié)會(huì)入會(huì)申請(qǐng)表
- 鄉(xiāng)村獸醫(yī)登記申請(qǐng)表(共1頁(yè))
- 旋挖樁主要施工方法及技術(shù)措施(全護(hù)筒)
評(píng)論
0/150
提交評(píng)論