
格式:數據類型 數組名[行][列];
示例:int buff[3][5];
第一個[3] 表示二維數組buff中有3個一位數組
(資料圖片僅供參考)
第二個[5] 表示每個一維數組中有5個成員。
若二維數組定義時進行初始化則第一個[]可以不填。第二個[]不能省略。
buff表示第0行的整體地址。即:&buff[0], buff類型為:int (*)[5]
buff[0]表示第0行的首地址。即:&buff[0][0], buff[0]類型為int *
buff[0][0]表示第0行第0列的值。
示例:int buff[][3]={1,2,3,4,5,6};//每行有3個元素int buff2[][3]={ {1,2,3}, {4,5,6}, }; //部分初始化,數組中未賦值的默認為0int buff3[][3]={ {1,2,3,}, {}, {4,5,6}, };//初始化自動計算行數,數組中未賦值的默認為0int buff3[][3]={ {}, {}, {}, }; int buff[3][3];//定義二維數組直接限制行、列,未初始化成員為隨機值二維數組遍歷
?示例一:
int main(){ int buff[][3]={1,2,3,4,5,6};//每行有3個元素 int i,j; for(i=0;i示例二:通過指針方式遍歷
#includeint main(){ int buff[][3]={1,2,3,4,5,6};//每行有3個元素 int *p=buff[0]; int i; for(i=0;i 2.二維數組作為形參處傳入
?以數組方式傳入將二維數組作為形參傳入,二維數組作為形參時,必須指定列寬。
#includevoid tow_array(int buff[][3],int line);int main(){ int buff[][3]={1,2,3,4,5,6};//每行有3個元素 tow_array(buff,sizeof(buff)/sizeof(buff[0]));}/************遍歷二維數組*********************以數組方式傳入,必須指定列寬**int line -- 二維數組行數****************************************/void tow_array(int buff[][3],int line){ int i,j; for(i=0;i 以數組指針傳入 #includevoid tow_array(int (*buff)[3],int line);int main(){ int buff[][3]={1,2,3,4,5,6};//每行有3個元素 tow_array(buff,sizeof(buff)/sizeof(buff[0]));}/************遍歷二維數組*********************以數組指針方式傳入,必須指定列寬**int line -- 二維數組行數****************************************/void tow_array(int (*buff)[3],int line){ int i,j; for(i=0;i 3.數組指針
定義:int (*p)[n]; 指向數組整體的指針。數組指針類型:int ()[n]
()優先級高,所以(*p)是一個指針,指向一個整型的一維數組,一維數組的成員個數為n,也就是說p的步長為n。即p+1偏移的地址為n個int型長度。因此數組指針也稱為行指針。
優先級: () > [] > *
示例:
#includeint main(){ int buff[][3]={1,10,3,4,5,6};//每行有3個元素 int (*p)[3]=buff; printf("*p[0]=%d\n",*p[0]);//等價于buff[0][0] printf("*(p[0]+1)=%d\n",*(p[0]+1));//等價于buff[0][1] printf("*p[1]=%d\n",*p[1]);//等價于buff[1][0]} 4.指針數組
定義:int*p[n]; 數組中保存int*指針。指針數組類型:int *[n],p的類型是int **,p+1偏移的地址為:sizeof(int )。
[]的優先級高,[]和p組合成一個數組,int和p[]組合成指針數組,他有n個指針類型的數組元素,即數組中的每一個元素都是int型指針。
優先級: () > [] > *
將二維數組賦給指針數組示例:#includevoid tow_array(int (*buff)[3],int line);int main(){ int buff[][3]={1,10,3,4,5,6};//每行有3個元素 int *p[3]; *p=buff[0]; p[0]=buff[0]; p[1]=buff[1]; p[2]=buff[2]; printf("%d\n",(*p)[0]);//等價于:p[0][0] printf("%d\n",(*p)[1]);//等價于p[0][1] printf("%d\n",*(p[0]+1));//等價于p[0][1] printf("%d\n",*(p+1)[0]);//等價于p[1][0],*(p+1)保存buf[1][0]地址 printf("%d\n",*(*(p+1)+1));//等價于p[1][1]} 注:二維數組賦值給指針數組時p=buff是錯誤的。
5.二維數組通過二維指針方式傳入
示例一:#includevoid tow_array(char **buff,int line);int main(){ int i; char *buff[]={"123", "123456", "123456789", "字符串口測試" }; tow_array(buff,sizeof(buff)/sizeof(buff[0]));}/************遍歷二維數組*********************以二維指針傳入**int line -- 二維數組行數****************************************/void tow_array(char **buff,int line){ int i,j; for(i=0;i 示例二: #includevoid tow_array(int **buff,int line,int row);int main(){ int i; int buff[][3]={1,10,3,4,5,6};//每行有3個元素 int *p[3]; //將二維數組賦值給指針數組 for(i=0;i