第15講二維數(shù)組與指針_第1頁
第15講二維數(shù)組與指針_第2頁
第15講二維數(shù)組與指針_第3頁
第15講二維數(shù)組與指針_第4頁
第15講二維數(shù)組與指針_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第15講二維數(shù)組與指針指針與二維數(shù)組2#define

M

2#define

N

3…intb[M][N];兩種觀點:看成一個一維數(shù)組看成數(shù)組的數(shù)組將二維數(shù)組看成一個一維數(shù)組元素int

b[M][N];二維數(shù)組b相當(dāng)于一個有6個的一維數(shù)組若有int

*p=&b[0][0];或p=b[0];(總之是列地址)b[i][j]相對于數(shù)組起始地址的偏移量為i*N+j則p[i*N+j]或*(p+i*N+j)表示每一個數(shù)組元素。b[0][0]b[0][1]b[0][2]b[1][0]b[1][1]b[1][2]p3P[0]P[1]P[2]P[3]P[4]P[5]填空題:求二維數(shù)組元素的和}0][0]for

(

i=0

;i<3;i++)for(j=0;

j<4;

j++){sum+=p[

i*3+j

];}printf(“sum=%4d",sum);a[0][0]a[0][1]a[0][2]a[0][3]a[1][0]a[1][1]……P[5]……P[0]P[1]P[2]P[3]P[4]#include

<stdio.h>void

main(){ int

a[3][4]={1,3,5,7,9,11,13,17,19p,21,23};int

i,j,sum=0,*p=

a[0]或&a[

;45#include

<stdio.h>void

main(){ int

a[3][4]={1,3,5,7,9,11,13,17,19,21,23};}}填空:輸出二維數(shù)組元素的值a[0][0]a[0][1]a[0][2]a[0][3]a[1][0]a[1][1]……p135791113輸出結(jié)果:1357911131517

19

21

23int

*p=

a[0]或&a[0][0]

;for

( ;

p<a[0]+12

;p++){ if

((p-a[0]

)%4==0)printf("\n");printf("%4d",

*p

);6將二維數(shù)組看成數(shù)組的數(shù)組行地址b+0b+1bb[0]*(b+0)b[1]*(b+1)將二維數(shù)組的每一行看成一維數(shù)組列地址b[0]+0

b[0]+1

b[0]+2一維數(shù)組b[0]

b[0][0]

b[0][1]

b[0][2]*(b[0]+0)

*(b[0]+1)

*(b[0]+2)列地址

b[1]+0

b[1]+1

b[1]+2一維數(shù)組b[1]

b[1][0]

b[1][1]

b[1][2]*(b[1]+0)

*(b[1]+1)

*(b[1]+2)再

數(shù)

b

由b[0],b[1]兩個元素組成的一維數(shù)組,注意:b[0],b[1]存放的是每行的首地址指針與二維數(shù)組行地址b+0b+1一維數(shù)組bbb[1]*(b+1)b[0]*(b+0)列地址b[0]+0*(b+0)+0b[0]+1*(b+0)+1b[0]+2*(b+0)+2一維數(shù)組b[0]b[1]+0*(b+1)+0b[1]+1*(b+1)+1b[1]+2*(b+1)+2列地址b[1][0]*(*(b+1)+0)b[1][1]*(*(b+1)+1)b[1][2]*(*(b+1)+2)b[0][0]*(*(b+0)+0)b[0][1]*(*(b+0)+1)b[0][2]*(*(b+0)+2)一維數(shù)組b[1]7指針與二維數(shù)組8b代表二維數(shù)組的首地址,指向第0行的首地址(行地址)b+i指向第i行的首地址(行地址)*(b+i)或b[i]代表第i行第0列的地址(列地址)*(b+i)+j

或b[i]+j代表第i行第j列的地址(列地址)*(*(b+i)+j)或b[i][j]代表第i行第j列的元素(數(shù)組元素)用數(shù)組名引用二維數(shù)組元素元素b[i][j]的幾種等價的引用方式b[i][j]*(b[i]+j)*(*(b+i)+j)(*(b+i))[j]如何用指針變量引用二維數(shù)組元素?9二維數(shù)組與指針10用指針指向二維數(shù)組,有兩種指針:列指針,這種指針指向二維數(shù)組的每一個元素,它每加1,指向二維數(shù)組的下一個數(shù)組元素。行指針,這種指針指向二維數(shù)組的行,它每加1,指向二維數(shù)組的下一行。上邊兩種指針分別對應(yīng)著對二維數(shù)組的兩種看法。二維數(shù)組的行指針行指針指向二維數(shù)組的行定義格式

:類型

(*行指針名)

[常量N];要用p指向數(shù)組b,如何初始化?p=b(或p=&b[0]);/*用行地址初始化*/11p++的含義是?例:int(*

p指)向[b3[]1;],即指向下一行的開始位含義:定義置一。個指針變量p,用于指向一行(每行如有何3用個P元引素用)b中每一個數(shù)據(jù)元素?p[i][j]*(p[i]+j)*(*(p+i)+j)(*(p+i))[j]12<string.h>i,

pos,findFlag

=

0;x[10];#includemain(){intcharcharweekDay[7][10]

=

{"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};char

(*p)[10]

=weekDay;printf("Please

enter

a

string:");scanf("%s",

x);for

(i=0;

i<7

&&

!findFlag;

i++){if

(strcmp(x,

*(p+i))

==

0){pos

=

i;findFlag

=

1;}}if

(findFlag)printf("%s

is

%d\n",

x,

pos);elseprintf("Not

found!\n");}讀程序weekDay[0]weekDay[1]weekDay[2]weekDay[3]weekDay[4]weekDay[5]weekDay[6]Sunday\0Monday\0Tuesday\0Wednesday\0Thursday\0Friday\0Saturday\0p13#include

<stdio.h>void

ave(float

(*p)[3],int

n);void

main(){int

num;float

score[5][3]={{65,98,76},{78,69,87},score:");scanf("%d",&num);ave(score,

num);getch();}voidave(float(*p)[3],int

n)/*對p指向的二維數(shù)組中第n行的數(shù)據(jù)求和*/{ int

i;float

average=0;printf("the

average

score

of

NO.%d

are:",n);for(i=0;i<3;i++) /*對第n行的數(shù)據(jù)求和*/average=*(*(p+n)+i)+average;average=average/3;printf("%5.2f",average);}例題8-1{67,68,81},{80,65,98},{64,83,79}};printf("please

inputnumber

of

s?t有ud沒ent有,其I

w它ill寫te法ll

?youhisaverage把第n行的數(shù)據(jù)當(dāng)成一個一維數(shù)組,問題變成求一維數(shù)組元素的和。14#include<stdio.h>float

*find(float(*pionter)[4],int

n);void

main(){

float

score[4][4]={{60,70,80,90},{56,89,34,45},{34,23,56,45}};float

*p;int

i,m;printf("Enter

the

number

to

be

found:");scanf("%d",&m);printf("the

score

of

NO.%d

are:\n",m);p=find(score,m); /*調(diào)用函數(shù)在score中找第m個學(xué)生所在行的首地址*/for(i=0;i<4;i++)printf("%5.2f\t",*(p+i));}float

*find(float(*pointer)[4],int

n){/*函數(shù)功能:在指針指向的二維數(shù)據(jù)中找第n行的首地址,并返回*/float

*pt;pt=*(pointer+n);return(pt);}例題8-9返回指針值的函數(shù)15#include

<stdio.h>for(i=0;i<5;i++){

p=a+i;printf(“%s\n”,*p);p=a+2;p++;printf("**p=%s\n",*p);}例8-2

讀程序a[0]a[1]a[2]a[3]a[4]abcde\0abc\0abcd\0ab\0abcdef\0pchar

(*p)[10];

/*行指針,其變

int

i;bcd","ab","abcdef"};化是行方向的地址變化*//*指向第i行*//*注意:*p仍然是地址,該語句輸a

入從這個地址開始到\0}結(jié)束的那一串字符*/void

main(){ char

a[5][10]={"abcde","abc","a

?輸出結(jié)果:abcdeabcabcdababcdefab16#include

<stdio.h>char

**p;int

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

p=a+i;}p=a+2;p++;printf("**p=%s\n",*p);}例8-2讀程序a[0]a[1]a[2]a[3]a[4]abcde\0abc\0abcd\0ab\0abcdef\0pvoid

main(){

char

*a[5]={"abcde","abc","abc/*定義一維指針數(shù)組a,a有五個數(shù)組元/*二級指針*//*

p指向指針數(shù)組a的每d","ab","abcdef"};素,每個元素存字符串的首地址*/一個元素*/printf(“%s\n”,*p);/*注意:*p與p[i]等價,仍然是地址*/a輸出結(jié)果:abcdeabcabcdababcdefab17二、指針數(shù)組元素均為指針類型數(shù)據(jù)的數(shù)組,稱為指針數(shù)組定義形式為:類型關(guān)鍵字

*數(shù)組名[數(shù)組長度];例如含義:pStr[5]*char注意與行指針的區(qū)別:char

*pStr[5c]h;ar(*pStr)[5];18例#include

<stdio.h>void

main(){int

i;char

*ptr[]={"Pascal","Basic","Fortran","Java","Visual

C"};char

**p;

p

=

ptr;for

(i=0;

i<5;

i++){printf("%s\n",

*p);p++;}}ptr[0]Pascalptr[1]ptr[2]ptr[3]BasicFortranJavaptr指針數(shù)組字符串Visual

Cptr[4]&Ptr[0]pp例:字符串排序方法一:用二維數(shù)組解決19char

str[N][10]

=

{"Pascal","Basic","Fortran","Java","Visual

C"};for

(i=0;

i<N-1;

i++)

/*交換法排序*/for

(j=i+1;j<N;j++){

if

(strcmp(str[j],

str[i])

<

0){strcpy(temp,str[i]);strcpy(str[i],str[j]);strcpy(str[j],temp);}}方法1排序前后str[0]str

[1]str

[2]str

[3]str

[4]Pascal\0\0\0\0Basic\0\0\0\0\0Fortran\0\0\0Java\0\0\0\0\0\0VisualC\0\0namenamenamenamenameB

asic\0\0\0\0\0F

ortran\0\0\0Java\0\0\0\0\0\0Pascal\0\0\0\0VisualC\0\0str[0]str[1]str[2]s

溫馨提示

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

最新文檔

評論

0/150

提交評論