今日关注:二维数组、数组指针以及指针数组

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程序员面试金典:整数转换