《C語言程序設(shè)計(jì)(第2版)》第08章指針_第1頁
《C語言程序設(shè)計(jì)(第2版)》第08章指針_第2頁
《C語言程序設(shè)計(jì)(第2版)》第08章指針_第3頁
《C語言程序設(shè)計(jì)(第2版)》第08章指針_第4頁
《C語言程序設(shè)計(jì)(第2版)》第08章指針_第5頁
已閱讀5頁,還剩72頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

Chap

8指針

8.1尋找保險(xiǎn)箱密碼8.2角色互換8.3冒泡排序8.4電碼加密8.5任意個(gè)整數(shù)求和*本章要點(diǎn)變量、內(nèi)存單元和地址之間是什么關(guān)系?如何定義指針變量,怎樣才能使用指針變量?什么是指針變量的初始化?指針變量的基本運(yùn)算有哪些?如何使用指針操作所指向的變量?指針作為函數(shù)參數(shù)的作用是什么?如何使用指針實(shí)現(xiàn)函數(shù)調(diào)用返回多個(gè)值?如何利用指針實(shí)現(xiàn)內(nèi)存的動(dòng)態(tài)分配?8.1尋找保險(xiǎn)箱密碼

一個(gè)關(guān)于國安局特工尋找保險(xiǎn)箱密碼的故事…關(guān)鍵點(diǎn)分析得到線索:地址為2170的房間內(nèi)有線索提示地址:1976找到目標(biāo):地址為1976的房間取出內(nèi)容:9118.1尋找密碼的途徑分析密碼存放需要一定的存儲(chǔ)空間作為存放地,每個(gè)存放地都會(huì)有地址如果知道了存放地的名字,當(dāng)然能夠找到密碼。但并不是每個(gè)存儲(chǔ)空間都有名字如果不知道存放地的名字,知道該存放地的地址也能夠取出密碼如果連存放地的地址也不知道,但是有另外一個(gè)地方存放了該密碼存放地的地址,那么找到這個(gè)地方,就能順藤摸瓜,間接找到密碼8.1密碼存放示意圖9111976P19762170名字P地址21701976內(nèi)容1976911例8-1利用指針模擬尋找保險(xiǎn)箱密碼的過程

獲取密碼的兩種方法

intmain(void){ intkey=911;/*變量key用于存放密碼值911*/

int*p_addr=NULL;/*變量p_addr是整型指針變量*/

p_addr=&key;/*將key的地址賦給p_addr*/

/*通過變量key輸出密碼值*/

printf("Thekeyis:%d\n",key);

/*通過變量名key輸出密碼值*/

printf("IfIknowthenameofthevariable,Icangetit’svaluebyname:%d\n",key);/*通過變量key的地址來輸出密碼值*/

printf("IfIknowtheaddressofthevariableis:%x,thenIalsocangetit’svaluebyaddress:%d\n",p_addr,*p_addr);

return0;}IfIknowthenameofthevariable,Icangetit’svaluebyname:911IfIknowtheaddressofthevariableis:12ff7c,thenIalsocangetit’svaluebyaddress:9118.1.2地址和指針-指針的概念內(nèi)存單元地址內(nèi)容變量intx=20,y=1,z=155;printf("%d",x;)直接訪問:通過變量名訪問間接訪問:通過另一個(gè)變量訪問把變量的地址放到另一變量中使用時(shí)先找到后者再從中取出前者的地址100020x10021y1004155z20001000p2002地址指針變量指針內(nèi)存單元地址內(nèi)容變量intx=20,y=1,z=155;printf("%d",x;)100020x10021y1004155z20001000p2002地址指針變量指針變量:存放地址的變量某個(gè)變量的地址指向指針變量所指向的變量的類型int*p;p是整型指針,指向整型變量float*fp;fp

是浮點(diǎn)型指針,指向浮點(diǎn)型變量char*cp;

cp是字符型指針,指向字符型變量類型名*

指針變量名指針聲明符8.1.3指針變量的定義指針變量的定義類型名*

指針變量名int*

p;指針變量名是

p,不是*p*是指針聲明符intk,*p1,*p2;等價(jià)于:intk;int*p1;int*p2;定義多個(gè)指針變量時(shí),每一個(gè)指針變量前面都必須加上*8.1.4指針的基本運(yùn)算

*

間接訪問運(yùn)算符,訪問指針?biāo)赶虻淖兞?p:指針變量p所指向的變量a3&ap*p如果指針的值是某個(gè)變量的地址,通過指針就能間接訪問那個(gè)變量。1、取地址運(yùn)算和間接訪問運(yùn)算

&

取地址運(yùn)算符,給出變量的地址int*p,a=3;p=&a;把a(bǔ)的地址賦給

p,即p指向a指針變量的類型和它所指向變量的類型相同#include<stdio.h>intmain(void){inta=3,*p; p=&a;

printf(“a=%d,*p=%d\n”,a,*p);*p=10;

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

printf("Entera:");

scanf("%d",&a);

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

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

return0;}例8-2指針取地址運(yùn)算和間接訪問運(yùn)算

a3&ap*pa=3,*p=3a=10,*p=10Entera:5

a=5,*p=5a=6,*p=6

a3&ap*p(1)當(dāng)p=&a后,*p與a相同(2)int*p;定義指針變量p

*p=10;指針p所指向的變量,即a(3)&*p與&a相同,是地址

*&a與a相同,是變量(4)(*p)++等價(jià)于a++

將p所指向的變量值加1*p++等價(jià)于*(p++)

先取*p,然后p自加,此時(shí)p不再指向a說明inta=1,x,*p;p=&a;x=*p++;2、賦值運(yùn)算a3&ap1&ap2*p1

*p2inta=3,*p1,*p2;p1=&a;把a(bǔ)的地址賦給

p1,即p1指向ap2=p1;p2也指向a相同類型的指針才能相互賦值1)指針變量在定義后也要先賦值再引用

2)在定義指針變量時(shí),可以同時(shí)對(duì)它賦初值

inta;

int*p1=&a;int*p2=p1;3)不能用數(shù)值作為指針變量的初值,但可以將一個(gè)指針變量初始化為一個(gè)空指針

int*p=1000;p=0;p=NULL;p=(int*)1732;8.1.5指針變量的初始化使用強(qiáng)制類型轉(zhuǎn)換(int*)來避免編譯錯(cuò)誤,不提倡8.2角色互換如何通過函數(shù)調(diào)用實(shí)現(xiàn)代表2個(gè)角色的變量互相…三套方案swap1()swap2()swap3()哪個(gè)方案能成功?例8-3指針作為函數(shù)參數(shù)模擬角色互換intmain(void)

{inta=1,b=2;

int*pa=&a,*pb=&b;

voidswap1(intx,inty),swap2(int*px,int*py),swap3(int*px,int*py);

swap1(a,b);

printf(“Aftercallingswap1:a=%db=%d\n”,a,b);

a=1;b=2;

swap2(pa,pb);

printf(“Aftercallingswap2:a=%db=%d\n”,a,b);a=1;b=2;

swap3(pa,pb);

printf(“Aftercallingswap3:a=%db=%d\n”,a,b);return0;}調(diào)用哪個(gè)函數(shù),可以交換main()中變量a和b的值?例8-3swap1()swap1(a,b);voidswap1(intx,inty){intt;t=x;x=y;y=t;}例8-3swap2()swap2(&a,&b);voidswap2(int*px,int*py){intt;t=*px;*px=*py;*py=t;}例8-3swap3()swap3(&a,&b);voidswap3(int*px,int*py){int*pt;pt=px;

px=py;

py=pt;}Aftercallingswap1:a=1,b=2Aftercallingswap2:a=2,b=1Aftercallingswap3:a=1,b=28.2.2指針作為函數(shù)參數(shù)函數(shù)參數(shù)包括實(shí)參和形參,兩者的類型要一致,可以是指針類型如果實(shí)參是某個(gè)變量的地址,相應(yīng)的形參就是指針在C語言中實(shí)參和形參之間的數(shù)據(jù)傳遞是單向的“值傳遞”方式例8-3swap1()a12bx12y21swap1(a,b);voidswap1(intx,inty){intt;t=x;x=y;y=t;}在swap1()函數(shù)中改變了形參x,y的值但不會(huì)反過來影響到實(shí)參的值

swap1()不能改變main()函數(shù)中實(shí)參a和b的值

例8-3swap2()swap2(&a,&b);voidswap2(int*px,int*py){intt;t=*px;*px=*py;*py=t;}abpxpy12值傳遞,地址未變,但存放的變量的值改變了21在swap2()函數(shù)中交換*px和*py的值,主調(diào)函數(shù)中a和b的值也相應(yīng)交換了

例8-3swap3()swap3(&a,&b);voidswap3(int*px,int*py){int*pt;pt=px;

px=py;

py=pt;}abpxpy12值傳遞,形參指針的改變不會(huì)影響實(shí)參swap3()中直接交換了形參指針px和py的值

指針作為函數(shù)參數(shù)的應(yīng)用swap2(&a,&b);voidswap2(int*px,int*py){intt;t=*px;*px=*py;*py=t;}要通過函數(shù)調(diào)用來改變主調(diào)函數(shù)中某個(gè)變量的值:(1)在主調(diào)函數(shù)中,將該變量的地址或者指向該變量的指針作為實(shí)參(2)在被調(diào)函數(shù)中,用指針類型形參接受該變量的地址

(3)在被調(diào)函數(shù)中,改變形參所指向變量的值abpxpy1221Aftercallingswap1:a=1,b=2Aftercallingswap2:a=2,b=1Aftercallingswap3:a=1,b=2通過指針實(shí)現(xiàn)函數(shù)調(diào)用返回多個(gè)值

例8-4輸入年和天數(shù),輸出對(duì)應(yīng)的年、月、日。例如:輸入2000和61,輸出2000-3-1。定義函數(shù)month_day(year,yearday,*pmonth,*pday)用2個(gè)指針作為函數(shù)的參數(shù),帶回2個(gè)結(jié)果intmain(void){

intday,month,year,yearday;voidmonth_day(int

year,int

yearday,int*pmonth,int*pday);

printf(“inputyearandyearday:”);

scanf("%d%d",&year,&yearday);

month_day(year,yearday,&month,&day);

printf("%d-%d-%d\n",year,month,day); return0; }例8-4voidmonth_day(intyear,int

yearday,int*pmonth,int*pday){intk,leap;

inttab[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,31,31,30,31,30,31},};

/*建立閏年判別條件leap*/leap=(year%4==0&&year%100!=0)||year%400==0;

for(k=1;yearday>tab[leap][k];k++)

yearday=yearday-tab[leap][k];*pmonth=k;*pday=yearday;}inputyearandyearday:200061

2000-3-1monthdaypmonthpday318.3冒泡排序-程序解析

voidbubble(inta[],intn);intmain(void){intn,a[8];inti;

printf("Entern(n<=8):");

scanf("%d",&n);

printf("Entera[%d]:",n);for(i=0;i<n;i++)

scanf("%d",&a[i]);

bubble(a,n);

printf("Aftersorted,a[%d]=",n);for(i=0;i<n;i++) printf("%3d",a[i]);

return0;}voidbubble(inta[],intn){inti,j;for(i=1;i<n;i++) for(j=0;j<n-i;j++)if(a[j]>a[j+1]){ t=a[j];a[j]=a[j+1];a[j+1]=t;}}

Entern(n<=8):8Entera[8]:73663-522-772Aftersorted,a[8]=-77-5233722668.3.2數(shù)組和地址間的關(guān)系inta[100],*p;數(shù)組名代表一個(gè)地址,它的值是數(shù)組首元素的地址(基地址)a+i

是距數(shù)組a的基地址的第i個(gè)偏移3000a[0]地址內(nèi)容數(shù)組元素3002a[1]3198a[99]a[i]aa+1a+99a+i&a[i]*(a+i)sum=0;for(i=0;i<100;i++)sum=sum+a[i];*(a+i)下標(biāo)運(yùn)算符[]的含義指針和數(shù)組的關(guān)系任何由數(shù)組下標(biāo)來實(shí)現(xiàn)的操作都能用指針來完成inta[100],*p;p=a;或p=&a[0];

pp+1p+99p+i3000a[0]地址內(nèi)容數(shù)組元素3002a[1]3198a[99]a[i]

aa+1a+99a+i&a[i]

a[i]a+i

*(a+i)p+i

*(p+i)&p[i]

p[i]p=a;sum=0;for(i=0;i<100;i++)sum=sum+p[i];等價(jià)等價(jià)用指針完成對(duì)數(shù)組的操作inta[100],*p;移動(dòng)指針p3000a[0]地址內(nèi)容數(shù)組元素3002a[1]3198a[99]a[i]aa+1a+99a+isum=0;for(p=a;p<=

&a[99];p++)sum=sum+*p;ppp#include<stdio.h>intmain(void){doublea[2],*p,*q;p=&a[0];

q=p+1;

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

printf("%d\n",(int)q-(int)p);return0;}例8-6使用指針計(jì)算數(shù)組元素個(gè)數(shù)和數(shù)組元素的存儲(chǔ)單元數(shù)

18指針p和q之間元素的個(gè)數(shù)指針p和q之間的字節(jié)數(shù)地址值pq3000a[0]地址內(nèi)容數(shù)組元素3008a[1]aa+1double*p,*q;q-p兩個(gè)相同類型的指針相減,表示它們之間相隔的存儲(chǔ)單元的數(shù)目p+1/p-1指向下一個(gè)存儲(chǔ)單元/指向上一個(gè)存儲(chǔ)單元其他操作都是非法的指針相加、相乘和相除,或指針加上和減去一個(gè)浮點(diǎn)數(shù)p<q兩個(gè)相同類型指針可以用關(guān)系運(yùn)算符比較大小指針的算術(shù)運(yùn)算和比較運(yùn)算pq3000a[0]地址內(nèi)容數(shù)組元素3008a[1]aa+1intmain(void){inti,a[10],*p;longsum=0;

printf("Enter10integers:");

for(i=0;i<10;i++)

scanf("%d",&a[i]);for(i=0;i<10;i++)sum=sum+a[i];

printf("calculatedbyarray,sum=%ld\n",sum);

sum=0;

for(p=a;p<=a+9;p++)

sum=sum+*p;

printf("calculatedbypointer,sum=%ld\n",sum);return0;}

例8-7分別使用數(shù)組和指針計(jì)算數(shù)組元素之和

Enter10integers:

10987654321

calculatedbyarray,sum=55

calculatedbypointer,sum=55p3000a[0]地址內(nèi)容數(shù)組元素3002a[1]3018a[9]a[i]aa+1a+9a+ippp數(shù)組元素作為函數(shù)實(shí)參時(shí),函數(shù)形參為變量與變量作為函數(shù)實(shí)參相同,值傳遞8.3.3數(shù)組名作為函數(shù)的參數(shù)doublefact(intn);intmain(void){

inti,n=5;doublesum; sum=0;for(i=1;i<=n;i++) sum=sum+fact(i);

printf("sum=%e\n",sum);return0;}doublefact(intn){inti; doubleresult=1;

for(i=1;i<=n;i++) result=result*i;returnresult;}inta[5]={1,4,5,7,9};fact(a[i-1]);1!+4!+5!+7!+9!數(shù)組名是指針常量,相當(dāng)于指針作為函數(shù)的參數(shù)數(shù)組名做為實(shí)參,形參是指針變量(數(shù)組)數(shù)組名作為函數(shù)的參數(shù)intsum(int*a,intn){inti,s=0;for(i=0;i<n;i++)s+=a[i];return(s);}例intmain(void){inti;

intb[5]={1,4,5,7,9};

printf("%d\n",sum(b,5));return0;}(1)實(shí)參是數(shù)組名(2)形參是指針變量可以寫成數(shù)組形式int

a[]*(a+i)intsum(int*a,intn){inti,s=0;for(i=0;i<n;i++)s+=a[i];return(s);}

intmain(void){inti;

intb[5]={1,4,5,7,9};

printf("%d\n",sum(b,5));return0;}b

b[0]b[5]asum(b,5)b[0]+b[1]+...+b[4]sum(b,3)b[0]+b[1]+b[2]sum(b+1,3)b[1]+b[2]+b[3]sum(&b[2],3)b[2]+b[3]+b[4]#include<stdio.h>intmain(void){inti,a[10],n;voidreverse(intp[],intn);

printf("Entern:");

scanf("%d",&n);

printf("Enter%dintegers:",n);for(i=0;i<n;i++)

scanf("%d",&a[i]);

reverse(a,n);for(i=0;i<n;i++)

printf("%d\t",a[i]); return0;}

例8-8將數(shù)組元素逆序存放voidreverse(int

p[],intn){inti,j,t;for(i=0,j=n-1;i<j;i++,j--){t=p[i];p[i]=p[j];p[j]=t;}}Entern:10Enter10integers:1098765432112345678910數(shù)組名做為函數(shù)的參數(shù),在函數(shù)調(diào)用時(shí),將實(shí)參數(shù)組首元素的地址傳給形參(指針變量),因此,形參也指向?qū)崊?shù)組的首元素。如果改變形參所指向單元的值,就是改變實(shí)參數(shù)組首元素的值?;颍盒螀?shù)組和實(shí)參數(shù)組共用同一段存貯空間,如果形參數(shù)組中元素的值發(fā)生變化,實(shí)參數(shù)組中元素的值也同時(shí)發(fā)生變化。a

a[0]a[5]p指針實(shí)現(xiàn)voidreverse(int*p,intn){int*pj,t;

for(pj=p+n-1;p<pj;p++,pj--){t=*p;*p=*pj;*pj=t;}}a[0]p數(shù)組元素內(nèi)容指針a[1]a[9]pj

#include<stdio.h>intmain(void){inti,a[10],n;voidreverse(intp[],intn);

printf("Entern:");

scanf("%d",&n);

printf("Enter%dintegers:",n);for(i=0;i<n;i++)

scanf("%d",&a[i]);

reverse(a,n);for(i=0;i<n;i++)

printf("%d\t",a[i]); return0;}8.3.4冒泡排序算法分析相鄰兩個(gè)數(shù)比較,小的調(diào)到前面,大的調(diào)到后面98888854408955554504559444605444966066666908000009i=1i=2i=3i=4i=5a[j]>a[j+1]j=0to4j=0to3j=0to2j=0to6-1-i98888854408955554504559444605444966066666908000009

985460i=1j=0:895460j=1:859460j=2:854960j=3:854690j=4:854609intmain(void){inti,j,n,t,a[10];n=6;for(i=0;i<n;i++)

scanf("%d",&a[i]);for(i=1;i<n;i++)for(j=0;j<n-i;j++) if(a[j]>a[j+1]){ t=a[j]; a[j]=a[j+1]; a[j+1]=t; }return0;}intmain(void){inti,a[10];for(i=0;i<10;i++)

scanf("%d",&a[i]);

sort(a,10);for(i=0;i<10;i++)

printf("%d",a[i]);

printf("\n");return0;}voidsort(int*array,intn){

inti,j,t;for(i=1;i<n;i++)for(j=0;j<n-i;j++) if(array[j]>array[j+1]){ t=array[j]; array[j]=array[j+1]; array[j+1]=t; }}字符串:字符數(shù)組字符指針8.4.1程序解析8.4.2字符串和字符指針8.4.3常用的字符串處理函數(shù)8.4電碼加密8.4.1程序解析-加密

#defineMAXLINE100voidencrypt(char*);intmain(void){charline[MAXLINE];

printf("Inputthestring:");

gets(line);

encrypt(line);

printf(“%s%s\n”,“Afterbeingencrypted:”,line);return0;}voidencrypt(char*s){for(;*s!='\0';s++)if(*s=='z')*s='a'; else*s=*s+1;}Inputthestring:hellohangzhouAfterbeingencrypted:ifmmp!ibohaipv8.4.2字符串和字符指針

字符串常量"array""point"用一對(duì)雙引號(hào)括起來的字符序列被看做一個(gè)特殊的一維字符數(shù)組,在內(nèi)存中連續(xù)存放實(shí)質(zhì)上是一個(gè)指向該字符串首字符的指針常量charsa[]="array";char*sp="point";charsa[]="array";char*sp="point";printf("%s",sa); printf("%s",sp); printf("%s\n","string");

arraypointstringprintf("%s",sa+2);printf("%s",sp+3);printf("%s\n",string"+1);raynt

tring數(shù)組名sa、指針sp和字符串"string"的值都是地址字符數(shù)組與字符指針的重要區(qū)別charsa[]="Thisisastring";char*sp="Thisisastring";saThisisastring\0spThisisastring\0如果要改變數(shù)組sa所代表的字符串,只能改變數(shù)組元素的內(nèi)容如果要改變指針sp所代表的字符串,通常直接改變指針的值,讓它指向新的字符串示例charsa[]="Thisisastring";char*sp="Thisisastring";strcpy(sa,"Hello");sp="Hello";sa=“Hello”;非法數(shù)組名是常量,不能對(duì)它賦值字符指針-先賦值,后引用定義字符指針后,如果沒有對(duì)它賦值,指針的值不確定。

char*s;scanf(“%s”,s);char*s,str[20];s=str;scanf(“%s”,s);定義指針時(shí),先將它的初值置為空char*s=NULL不要引用未賦值的指針加密函數(shù)的兩種實(shí)現(xiàn)voidencrypt(chars[]){

inti; for(i=0;s[i]!='\0';i++)if(s[i]=='z')

s[i]='a'; else

s[i]=s[i]+1;}voidencrypt(char*s){for(;*s!='\0';s++)if(*s=='z')*s='a'; else*s=*s+1;}8.4.3常用的字符串處理函數(shù)函數(shù)原型在stdio.h

或string.h中給出1、字符串的輸入和輸出輸入字符串:scanf()或gets()輸出字符串:printf()或puts()

stdio.hcharstr[80];i=0;while((str[i]=getchar())!='\n')i++;str[i]='\0';(1)scanf("%s",str)輸入?yún)?shù):字符數(shù)組名,不加地址符遇回車或空格輸入結(jié)束,并自動(dòng)將輸入的一串字符和‘\0’送入數(shù)組中(2)gets(str)遇回車輸入結(jié)束,自動(dòng)將輸入的一串字符和‘\0’送入數(shù)組中

字符串的輸入'\n''''\t'charstr[80];for(i=0;str[i]!=‘\0’;i++)

putchar(str[i]);(3)printf("%s",str)

printf("%s","hello");(4)puts(str)puts("hello");輸出字符串后自動(dòng)換行輸出參數(shù)可以是字符數(shù)組名或字符串常量,輸出遇'\0'結(jié)束字符串的輸出#include<stdio.h>intmain(){charstr[80];

scanf("%s",str);

printf("%s",str);

printf("%s","Hello");return0;}例8-10字符串輸入輸出函數(shù)示例#include<stdio.h>intmain(){charstr[80];

gets(str);

puts(str);puts("Hello");return0;}ProgrammingProgrammingHelloProgrammingisfun!

ProgrammingHelloProgrammingProgrammingHelloProgrammingisfun!

Programmingisfun!Hello2、字符串的復(fù)制、連接、比較、

求字符串長度字符串復(fù)制:strcpy(str1,str2)字符串連接:strcat(str1,str2)字符串比較:strcmp(str1,str2)求字符串長度:strlen(str)string.hstrcpy(str1,str2);將字符串str2復(fù)制到str1中

staticcharstr1[20];staticcharstr2[20]=“happy”;字符串復(fù)制函數(shù)strcpy()happy\0\0strcpy(str1,str2);happy\0str1中strcpy(str1,“world”);str1中:world\0#include"stdio.h"#include"string.h"intmain(void){charstr1[20],str2[20];gets(str2);strcpy(str1,str2);puts(str1);return0;}strcpy()示例12341234

strcat(str1,str2);

連接兩個(gè)字符串str1和str2,并將結(jié)果放入str1中字符串連接函數(shù)strcat

#include"stdio.h"#include"string.h"intmain(void){charstr1[80],str2[20];gets(str1);gets(str2);strcat(str1,str2);puts(str1);return0;}str1中:

Letus\0str2中:go.\0str1中:

Letusgo.\0str2中:go.\0Letusgo.

Letusgo.str1=str1+str2

非法!strcmp(str1,str2)比較兩個(gè)字符串str1和str2的大小。規(guī)則:按字典序(ASCII碼序)如果str1和str2相等,返回0;如果str1大于str2,返回一個(gè)正整數(shù);如果str1小于str2,返回一個(gè)負(fù)整數(shù);staticchars1[20]="sea";

字符串比較函數(shù)strcmpstrcmp(s1,"Sea");strcmp("Sea","Sea");strcmp("Sea","Sea");正整數(shù)負(fù)整數(shù)0#include"stdio.h"#include"string.h"intmain(void){intres;chars1[20],s2[20];gets(s1);gets(s2);res=strcmp(s1,s2);printf("%d",res);return0;}strcmp()示例12342-1利用字符串比較函數(shù)比較字符串的大小

strcmp(str1,str2);為什么定義這樣的函數(shù)?用strcmp()比較字符串strcmp(str1,str2)>0strcmp(str1,"hello")

<0strcmp(str1,str2)==0str1>str2str1<"hello"str1==str2

比較字符串首元素的地址比較字符串的內(nèi)容strlen(str)計(jì)算字符串的有效長度,不包括‘\0’。staticcharstr[20]="Howareyou?"strlen("hello")的值是:strlen(str)的值是:字符串長度函數(shù)strlen512函數(shù)功能頭文件

puts(str)輸出字符串stdio.h

gets(str)輸入字符串(回車間隔)strcpy(s1,s2)s2==>s1strcat(s1,s2)s1“+”s2==>s1

若s1“==”s2,函數(shù)值為0

strcmp(s1,s2)

若s1“>”s2,函數(shù)值>0string.h

若s1“<”s2,函數(shù)值<0計(jì)算字符串的有效長度,

strlen(str)

不包括‘\0’字符串處理函數(shù)小結(jié)intmain(){inti;

intx,min;

scanf("%d",&x);min=x;

for(i=1;i<5;i++){

scanf("%d",&x);

if(x<min)min=x;}

printf("minis%d\n",min);return0;}例8-11求最小字符串#include<string.h>intmain(){inti;charsx[80],smin[80];

scanf("%s",sx);

strcpy(smin,sx);for(i=1;i<5;i++){

scanf("%s",sx);

if(strcmp(sx,smin)<0)

strcpy(smin,sx);}

printf("minis%s\n",smin);return0;}28-1990

minis–1

toolkeyaboutzoosea

minisabout

8.5任意個(gè)整數(shù)求和*例8-12

溫馨提示

  • 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)論