物聯網學習教程— 多維陣列與指標
用指標變數可以指向一維陣列中的元素,也可以指向多維陣列中的元素。但在概念上和使用上,多維陣列的指標比一維陣列的指標要複雜一些。
1. 多維陣列元素的地址
先回顧一下多維陣列的性質, 可以認為二維陣列是“陣列的陣列”,例 :
定義int a [ 3 ][ 4 ] ={{1 , 3 , 5 , 7} ,{9,11,13,15},{17,19,21,23} } ;
則二維陣列a 是由 3 個一維陣列所組成的。設二維陣列的首行的首地址為2000 ,則
#include <stdio.h>
#define FROMAT ″%d,%d\n″
void main ()
{ int a [3][4] ={ 1 , 3 , 5 , 7 , 9 ,11,13,
15,17,19,21,23};
printf (FORMAT,a, * a);
printf (FORMAT,a [0] , * (a+0));
printf (FORMAT,&a [0] ,&a [0][0] );
printf (FORMAT,a [1] ,a+1);
printf (FORMAT,&a [1][0] , * (a + 1) + 0);
printf (FORMAT,a[2], * (a+2));
printf (FORMAT,&a[2],a+2);
printf (FORMAT,a[1][0], * ( * (a+
1)+0));
}
某一次執行結果如下:
158,158 (0 行首地址和 0 行 0 列元素地址 )
158,158 (0 行 0 列元素地址 )
158,158 (0 行 0 首地址和 0 行 0 列元素地址 )
166,166 (1 行 0 列元素地址和 1 行首地址 )
166,166 (1 行 0 列元素地址 )
174,174 (2 行 0 列元素地址 )
174,174 (2 行首地址 )
9,9 (1 行 0 列元素的值 )
指向多維陣列元素的指標變數
(1) 指向陣列元素的指標變數
例 如: 用指標變數輸出二維陣列元素的值
#include <stdio.h>
void main ()
{ int a [3][4] ={ 1,3,5,7,9,11,13,15,17,19,21,23 };
int * p;
for (p=a[0];p<a[0]+12;p++)
{if((p-a[0])%4==0)
printf (″\n″);
printf (″%4d″, * p); }
}
(2) 指向由m個元素組成的一維陣列的指標變數
例 : 出二維陣列任一行任一列元素的值
#include <stdio.h>
void main ( )
{ int a[3][4]={ 1 , 3 , 5 , 7 , 9 , 11 ,
13 , 15 ,17,19,21,23};
int ( * p)[4],i,j;
p=a;
scanf (″ i=%d,j=%d″,&i,&j);
printf (″a[%d,%d]=%d\n″,i,
j,* ( * (p+i)+j));
}
3. 用指向陣列的指標作函式引數
例 : 有一個班,3個學生,各學4門課,計算總平均分數以及第n個學生的成績。這個題目是很簡單的。只是為了說明用指向陣列的指標作函式引數而舉的例子。用函式average 求總平均成績,用函式 search 找出並輸出第i個學生的成績。
#include <sydio.h>
void main ()
{ void average ( float *p , int n );
void search ( float (*p )[ 4 ], int n) ;
float score [ 3 ][ 4 ] ={{65 , 67 , 70 , 60} , {80 ,
87 , 90 , 81} , {90 , 99 , 100 , 98}};
average ( *score , 12 );/ * 求 12 個分數的平均分 * /
search ( score ,2);/ * 求序號為2的學生的成績 * /
}
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.2f\n″, aver );
}
void search ( float (* p )[4] , int n)
/ * p 是指向具有 4 個元素的一維陣列的指標 */ { int i;
printf (″ the score of No. % d are :\n″,n);
for (i=0;i<4;i++ )
printf (″% 5.2 f″, * ( * (p+n)+i));
}
程式執行結果如下:
average =82.25
The score of No.2 are :
90. 00 99 . 00 100 . 00 98 . 00
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69914734/viewspace-2654976/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 物聯網學習教程—字串與指標字串指標
- 物聯網學習教程——一維陣列的引用陣列
- 物聯網學習教程——二維陣列的引用陣列
- 指標陣列和陣列指標與二維陣列指標陣列
- 二維陣列與指標陣列指標
- C語言學習歷程(十二)陣列指標與指標陣列C語言陣列指標
- 物聯網學習教程— 字元指標作函式引數字元指標函式
- 指標陣列與陣列指標指標陣列
- Golang 學習——陣列指標和指標陣列的區別Golang陣列指標
- 物聯網學習教程—列舉型別型別
- 陣列指標,指標陣列陣列指標
- 陣列指標 指標陣列陣列指標
- 二維陣列和指標陣列指標
- 物聯網學習系列教程
- 陣列指標和指標陣列陣列指標
- 徹底搞清C/C++中一維陣列,二維陣列,指標,陣列指標和指標陣列以及指向指標的指標,行地址和列地址之間的關係C++陣列指標
- JavaScript 學習筆記 - 多維陣列變為一維陣列JavaScript筆記陣列
- 日常學習儲存--陣列和指標陣列指標
- 【原創】淺談指標(九)二維陣列和多級指標相關指標陣列
- 物聯網學習教程——if語句
- PHP中二維陣列與多維陣列PHP陣列
- C++ 指標陣列與陣列指標的區別C++指標陣列
- 物聯網學習教程—多型的實現機制多型
- Go 陣列指標(指向陣列的指標)Go陣列指標
- 物聯網學習教程——格式輸入與輸出
- 陣列地址與指標之間的區別與聯絡陣列指標
- C語言系列之 指標與陣列總複習視訊教程C語言指標陣列
- C語言程式設計基礎:指標陣列與陣列指標C語言程式設計指標陣列
- 物聯網學習教程——switch語句
- 物聯網學習教程——if語句2
- 指標陣列練習排列字串指標陣列字串
- 陣列指標陣列指標
- Java break、continue 詳解與陣列深入解析:單維陣列和多維陣列詳細教程Java陣列
- C語言 指標與陣列C語言指標陣列
- 陣列與指標&氣泡排序陣列指標排序
- 字串指標與字元陣列 (轉)字串指標字元陣列
- 陣列指標:a pointer to an array,即指向陣列的指標陣列指標
- 物聯網學習教程——執行緒池執行緒