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

下載本文檔

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

文檔簡介

多維數(shù)組與指針,8.3.4 多維數(shù)組與指針 p245,1. 多維數(shù)組元素的地址,先回顧一下多維數(shù)組的性質(zhì),可以認為二維數(shù)組是“數(shù)組的數(shù)組“,例 : short int a34= 1,3,5,7,9,11,13,15,17,19,21,23; 則二維數(shù)組a可看成是由3個一維數(shù)組所組成的。設二維數(shù)組的首行的首地址為2000 ,則,2000,2008,2016,a0+1 :對應第0行第1列的地址,為2002 a1+1:對應第1行第1列的地址,為2010 a2+1 :對應第2行第1列的地址,為2018 如圖10 . 22所示。,二維數(shù)組名 a 代表數(shù)組a的首元素的地址,為2000,數(shù)組a的每一個元素都是一個長度為4的一維數(shù)組,故,a+1 :代表下標為1的元素的地址 2008,對應數(shù)組名a1 a+2 :代表下標為2的元素的地址 2016,對應數(shù)組名a2,一維數(shù)組名a0代表數(shù)組a0的首元素的地址 &a00 一維數(shù)組名a1代表數(shù)組a1的首元素的地址 &a10 一維數(shù)組名a2代表數(shù)組a2的首元素的地址,&a20故,圖8.20,a0,a1,a2,p246, a i *( a + i ) a i + j *( a + i )+j &a i j *(a i + j) *(*( a + i )+j ) a i j 由上可看出: a + 1 : 1代表一行中全部元素所占字節(jié)數(shù) 8 a i + 1 : 1代表一列元素所占字節(jié)數(shù) 2,所以,第i行第j列的元素的地址可表示為: a i + j,a與a0的值雖相同,但由于指針類型不同: a: 二維數(shù)組名,指向行 a0; a0:一維數(shù)組名,指向列元素 a00。 故 a+1 a0+1,對一維數(shù)組int aN: ai 表示a數(shù)組的第i個元素的值 對二維數(shù)組int aNM: ai 是一個一維數(shù)組名,是一個地址,在行指針前加一個*,行指針就轉(zhuǎn)換為列指針 *a = a0 : 指向第0列的指針 在列指針前面加&,列指針就成為行指針 &a0 =a : 指向第0行的指針,直接使用二維數(shù)組下標,#include “stdio.h“ void main() short int a34=0,1,2,3,10,11,12,13,20,21,22,23; int i, j; for(i=0; i3; i+) printf(“n“); for(j=0; j4; j+) printf(“%p: %dn“, ,以一維數(shù)組名為指針,#include “stdio.h“ void main() short int a34=0,1,2,3,10,11,12,13,20,21,22,23; int i, j; for(i=0; i3; i+) printf(“n“); for(j=0; j4; j+) printf(“%p: %dn“, ai+j , *(ai+j) ); ,以二維數(shù)組名為指針,#include “stdio.h“ void main() short int a34=0,1,2,3,10,11,12,13,20,21,22,23; int i, j; for(i=0; i3; i+) printf(“n“); for(j=0; j4; j+) printf(“%p: %dn“, *(a+i)+j , *(*(a+i)+j) ); ,以下程序是否有誤?,#include “stdio.h“ void main() short int a34=0,1,2,3,10,11,12,13,20,21,22,23; int i, j; for(i=0; i3; i+) printf(“n“); for(j=0; j4; j+) printf(“%p: %dn“, (a+i)+j , *(*(a+i)+j) ); ,例10.10 輸出二維數(shù)組有關的值,main() int a34=0,1,2,3,4,5,6,7,8,9,10,11; printf(“a =%d, “,a); printf(“*a = %d, “,*a); printf(“a0=%d, “,a0); printf(“ ,int a34=0,1,2,3,4,5,6,7,8,9,10,11;,2 . 指向多維數(shù)組元素的指針變量,(1) 指向數(shù)組元素的指針變量,例8.11 用指針變量輸出二維數(shù)組元素的值,#include “stdio.h“ void main() int (*p)4 , a34=0,1,2,3,4,5,6,7,8,9,10,11; int i,j; p=a; for(i=0;i3;i+) printf(“n“); for(j=0;j4;j+) printf(“%2d “, *(*(p+i)+j) ); ,aij在數(shù)組amn中的相對位置的計算: i* n + j /*之前有i行,每行有n個;之前還有j個 */ 故 aij的值可表示為 *(p+ i*n+j ) 例如,數(shù)組a34中的a23的值可表示為: *(p+ 2*4+3) 即*(p+11) 如圖,(2) 指向一維數(shù)組的指針變量,例8.13 輸出二維數(shù)組任一行任一列元素的值,#include “stdio.h“ main() int a34=0,1,2,3,4,5,6,7,8,9,10,11; int(*p)4; int i,j; p=a; printf(“i (0-2): “);scanf(“%d“, , int a4 ; / a為數(shù)組名,有4個整型元素 int (*p)4; / *p為數(shù)組名,有4個整型元素 這4個元素分別為: (*p) 0 , (*p) 1 , (*p) 2 , (*p) 3 圖 8.24 對應于a00a03,a是二維數(shù)組名,故p是行指針,指向二維數(shù)組的每一行。 *(p + i) + j 是a數(shù)組第i行第j列元素的地址。 即 *(*(p + i) + j) 是 aij 的值。,對 int (*p)4; 的理解:,圖8.24,圖8.25,3. 用指向數(shù)組的指針作函數(shù)參數(shù),例8.14 有一個班,3個學生, 各學4門課, 計算總平均分數(shù)以及第n個學生的成績。 p252 1) 用指向數(shù)組的指針作函數(shù)參數(shù)。 2) 定義函數(shù)average求總平均成績 3) 定義函數(shù)search找出并輸出第i個學生的成績。,void average(float *p,int n) float *p_end; float sum=0,aver; p_end=p+n-1; for(;p=p_end;p+) sum=sum+(*p); aver=sum/n; printf(“average=%5.2fn“,aver); void search(float (*p)4,int n) int i; printf(“ no. %d :n“,n); for(i=0;i4;i+) printf(“%5.2f“,*(*(p+n)+i); ,#include “stdio.h“ void main() void average(float *p,int n); void search(float (*p)4,int n); float score34=65,67,70,60, 80,87,90,81, 90,99,100,98; /*求12個分數(shù)的平均分*/ average(*score,12); /*求序號為2的學生的成績*/ search(score,2); ,例8.15 在上題基礎上,查找有一門以上課程不及格的學生,打印出他們的全部課程的成績。,#include void main() void search(float (*p)4,int n);/*函數(shù)聲明*/ float score34=65,57,70,60,58,87, 90,81,90,99,100,98; search(score,3); ,void search(float (*p)4,int n) int i,j,flag; for(j=0;jn;j+) flag=0; for(i=0;i4;i+) if(*(*(p+j)+i)60) flag=1; if(flag=1) printf(“no.%d fails,his scor

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論