今日關注:二維數組、數組指針以及指針數組

2022-12-29 16:28:03 來源:51CTO博客

1.二維數組定義

格式:數據類型 數組名[行][列];

示例: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

示例二:通過指針方式遍歷

#include int main(){  int buff[][3]={1,2,3,4,5,6};//每行有3個元素  int *p=buff[0];  int i;  for(i=0;i

2.二維數組作為形參處傳入

?以數組方式傳入

將二維數組作為形參傳入,二維數組作為形參時,必須指定列寬。

#include void 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以數組指針傳入
#include void 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型長度。因此數組指針也稱為行指針。

優先級: () > [] > *

示例:

#include int 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型指針。

優先級: () > [] > *

將二維數組賦給指針數組示例:
#include void 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.二維數組通過二維指針方式傳入

示例一:
#include void 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示例二:
#include void 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                

標簽: 一維數組 指針類型

上一篇:百事通!冒泡排序
下一篇:【世界速看料】#yyds干貨盤點# LeetCode程序員面試金典:整數轉換