5.1.2指針數(shù)組及多級指針 - 指針數(shù)組及多級指針-教學(xué)課件_第1頁
5.1.2指針數(shù)組及多級指針 - 指針數(shù)組及多級指針-教學(xué)課件_第2頁
5.1.2指針數(shù)組及多級指針 - 指針數(shù)組及多級指針-教學(xué)課件_第3頁
5.1.2指針數(shù)組及多級指針 - 指針數(shù)組及多級指針-教學(xué)課件_第4頁
5.1.2指針數(shù)組及多級指針 - 指針數(shù)組及多級指針-教學(xué)課件_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第五章

指針進(jìn)階第1節(jié)指針數(shù)組及多級指針1程序解析2指針數(shù)組的概念3指向指針的指針4用指針數(shù)組處理多個字符串1程序解析【例1】已知奧運五環(huán)的5種顏色的英文單詞按一定順序排列,輸入任意一個顏色的英文單詞,從已有顏色中查找并輸出該顏色的位置值,若沒有找到,則輸出“NotFound”。1程序解析#include<stdio.h>#include<string.h>intmain(void){inti;char*color[5]={“red”,”blue”,”yellow”,”green”,”black”};charstr[20];printf(“Inputacolor:”);scanf(“%s”,str);for(i=0;i<5;i++)if(strcmp(str,color[i])==0)/*比較顏色是否相同*/break;if(i<5)printf(“position:%d\n”,i+1);elseprintf(“NotFound\n”);return0;}運行結(jié)果1Inputacolor:yellowposition:3運行結(jié)果2Inputacolor:purpleNotFound

指針數(shù)組2指針數(shù)組的概念C語言中的數(shù)組可以是任何類型,如果數(shù)組的各個元素都是指針類型,用于存放內(nèi)存地址,那么這個數(shù)組就是指針數(shù)組。一維指針數(shù)組定義的一般格式為:類型名*數(shù)組名[數(shù)組長度]2指針數(shù)組的概念inta[10];a是一個數(shù)組,它有10個元素每個元素的類型都是整型char*color[5];color是一個數(shù)組,它有5個元素每個元素的類型都是字符指針2指針數(shù)組的概念char*color[5]={"red","blue","yellow","green","black"

};color是一個數(shù)組,它有5個元素每個元素的類型都是字符指針數(shù)組元素可以處理字符串對指針數(shù)組元素的操作:printf("%s%x\n",color[i],color[i]);對指針數(shù)組元素的操作和對同類型指針變量的操作相同

繼續(xù)執(zhí)行:char*tmp;tmp=color[0];color[0]=color[4];color[4]=tmp;

2指針數(shù)組的概念

color[0]與color[4]交換后的情況

指針數(shù)組操作時:可以直接對數(shù)組元素進(jìn)行賦值(地址值)和引用tmp=color[0];也可以間接訪問和操作數(shù)組元素所指向的單元內(nèi)容

strcpy(color[0],“purple");3指向指針的指針C語言中,指向指針的指針(二級指針)一般定義為:

類型名**變量名

inta=10;

int*p=&a;int**pp=&p;&apa10&ppp*p*pp**pp&apaa10&pappa**ppa*pa&bpbb20&pbppb**ppb*pbpaappa&a10&pb**ppb*pa&bpbb20&pappb**ppa*pbpaappa&b10&pb**ppa*pb&apbb20&pappb**ppb*papaappa&b20&pb**ppa*pb&apbb10&pappb**ppb*painta=10,b=20,t;int*pa=&a,*pb=&b,*pt;int**ppa=&pa,**ppb=&pb,**ppt;【例2】操作(1):ppt=ppb;ppb=ppa;ppa=ppt;操作(2):pt=pb;pb=pa;pa=pt;操作(3):t=b;b=a;a=t;二維數(shù)組的指針形式a[3][4]:看成是由a[0]、a[1]、a[2]組成的一維數(shù)組,而a[0]、a[1]、a[2]各自又是一個一維數(shù)組。也即二維數(shù)組是數(shù)組元素為一維數(shù)組的一維數(shù)組。a:第0行地址(行地址)a+i:第i行的地址*(a+i)/a[i]:第i行首元素的地址*(a+i)+j/a[i]+j:第i行第j個元素的地址*(*a+i)/a[i][0]:第i行首元素的值*((*a+i)+j)/a[i][j]:第i行首元素的值3指向指針的指針【例3】改寫例1,用指向指針的指針實現(xiàn)。

#include<stdio.h>#include<string.h>intmain(void){inti;char*color[5]={“red”,”blue”,”yellow”,”green”,”black”};/char**pc;/*定義二級指針變量*/charstr[20];

pc=color;/*二級指針賦值*/printf(“Inputacolor:”);scanf(“%s”,str);for(i=0;i<5;i++)if(strcmp(str,*(pc+i))==0)/*比較顏色是否相同*/break;if(i<5)printf(“position:%d\n”,i+1);elseprintf(“NotFound\n”);return0;}3指向指針的指針指向指針的指針使用指向指針的指針操作數(shù)據(jù)3指向指針的指針【例3】改寫例1,用指向指針的指針實現(xiàn)。

pccolor&color[0]*pccolor[0]*(pc+i)color[i]**pc*(*pc)*color[0]:‘r’1.指針數(shù)組與二維數(shù)組二維字符數(shù)組charccolor[][7]={"red","blue","yellow","green",“black"};4用指針數(shù)組處理多個字符串使用指針數(shù)組更節(jié)省內(nèi)存空間指針數(shù)組char*pcolor[]={"red","blue","yellow","green",“black"};4用指針數(shù)組處理多個字符串2.用指針數(shù)組操作多個字符串【例4】將5個字符串從小到大排序后輸出。voidmain(){inti;inta[5]={6,5,2,8,1};

voidfsort(inta[],intn);

fsort(a,5);

for(i=0;i<5;i++)printf("%d",a[i]);}#include<string.h>voidmain(){inti;char

*pcolor[]={“red”,”blue”,”yellow”,”green”,”black”};

voidfsort(char*color[],intn);

fsort(pcolor,5);

for(i=0;i<5;i++)printf("%s",pcolor[i]);}4用指針數(shù)組處理多個字符串voidfsort(inta[],intn){intk,j;inttemp;for(k=1;k<n;k++)for(j=0;j<n-k;j++)if(a[j]>a[j+1]){temp=a[j];a[j]=a[j+1];a[j+1]=temp;}}voidfsort(char*color[],intn){intk,j;char*temp;for(k=1;k<n;k++)for(j=0;j<n-k;j++)

if(strcmp(color[j],color[j+1])>0){temp=color[j];color[j]=color[j+1];color[j+1]=temp;}}排序前排序后4用指針數(shù)組處理多個字符串例5解密藏頭詩。所謂藏頭詩,就是將一首詩每一句的第一個字連起來,所組成的內(nèi)容就是該詩的真正含義。編寫程序,輸出一首藏頭詩的真實含義。

一葉輕舟向東流,

帆梢輕握楊柳手,

風(fēng)纖碧波微起舞,

順?biāo)螐难趴陀啤?用指針數(shù)組處理多個字符串#include<stdio.h>char*change(chars[][20]);intmain(void){inti;char*poem[4]={"一葉輕舟向東流,","帆梢輕握楊柳手,","風(fēng)纖碧波微起舞,","順?biāo)螐难趴陀啤?};/*指針數(shù)組初始化*/charmean[10];for(i=0;i<4;i++){/*每行取第1個漢字存入mean*/

mean[2*i]=*(poem[i]);mean[2*i+1]=*(poem[i]+1);}

mean[2*i]=’\0’;

printf("%s\n",mean);/*輸出結(jié)果*/return0;}4用指針數(shù)組處理多個字符串4用指針數(shù)組處理多個字符串3.動態(tài)輸入多個字符串例6輸入一些有關(guān)顏色的單詞,每行一個,以#作為輸入結(jié)束標(biāo)志,再按輸入的相反次序輸出這些單詞。其中單詞數(shù)小于20,每個單詞不超過15個字母(用動態(tài)分配內(nèi)存的方法處理多個字符串的輸入)。#include<stdio.h>#include<stdlib.h>#include<string.h>intmain(void){inti,n=0;char*color[20],str[15];scanf("%s",str);while(str[0]!='#'){

color[n]=(char*)malloc(sizeof(char)*(strlen(str)+1));/*動態(tài)分配*/

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

評論

0/150

提交評論