二维数组数组指针以及指针数组

author author     2022-12-30     308

关键词:

 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,
;
//部分初始化,数组中未赋值的默认为0
int buff3[][3]=
1,2,3,,
,
4,5,6,
;
//初始化自动计算行数,数组中未赋值的默认为0
int 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<sizeof(buff)/sizeof(buff[0]);i++)

for(j=0;j<sizeof(buff[0])/sizeof(int);j++)

printf("%d ",buff[i][j]);

printf("\\n");


二维数组、数组指针以及指针数组_指针数组

示例二:通过指针方式遍历

#include <stdio.h>
int main()

int buff[][3]=1,2,3,4,5,6;//每行有3个元素
int *p=buff[0];
int i;
for(i=0;i<sizeof(buff)/sizeof(int);i++)

printf("%d ",*);


 2.二维数组作为形参处传入

  • ​以数组方式传入

     将二维数组作为形参传入,二维数组作为形参时,必须指定列宽。

#include <stdio.h>
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<line;i++)

for(j=0;j<3;j++)

printf("%d ",buff[i][j]);

printf("\\n");

二维数组、数组指针以及指针数组_指针数组_02

  • 以数组指针传入
#include <stdio.h>
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<line;i++)

for(j=0;j<3;j++)

printf("%d ",*(buff[i]+j));

printf("\\n");


3.数组指针

    定义:int (*p)[n];  指向数组整体的指针。数组指针类型:int ()[n]

    ()优先级高,所以(*p)是一个指针,指向一个整型的一维数组,一维数组的成员个数为n,也就是说p的步长为n。即p+1偏移的地址为n个int型长度。因此数组指针也称为行指针。

    优先级: () > [] > *

示例:

#include <stdio.h>
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]

二维数组、数组指针以及指针数组_指针数组_03

4.指针数组

定义:int*p[n];  数组中保存int*指针。指针数组类型:int *[n],p的类型是int **,p+1偏移的地址为:sizeof(int )。

    []的优先级高,[]和p组合成一个数组,int和p[]组合成指针数组,他有n个指针类型的数组元素,即数组中的每一个元素都是int型指针。

    优先级: () > [] > *

  •     将二维数组赋给指针数组示例:
#include <stdio.h>
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]

二维数组、数组指针以及指针数组_指针数组_04

注:二维数组赋值给指针数组时p=buff是错误的。

5. 二维数组通过二维指针方式传入

  • 示例一:
#include <stdio.h>
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<line;i++)

printf("%s\\n",*(buff+i));

二维数组、数组指针以及指针数组_指针数组_05

  • 示例二:
#include <stdio.h>
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<sizeof(buff)/sizeof(buff[0]);i++)

*(p+i)=buff[i];//或p[i]=buff[i];

tow_array(p,sizeof(buff)/sizeof(buff[0]),3);

/************遍历二维数组*****************
**
**以二维指针传入
**int line -- 二维数组行数
**int row -- 二维数组列
****************************************/
void tow_array(int **buff,int line,int row)

int i,j;
for(i=0;i<line;i++)

for(j=0;j<row;j++)

printf("%d",*(*(buff+i)+j));//或者buff[i][j]

printf("\\n");


二维数组、数组指针以及指针数组_二维数组_06

c语言中二维数组名是否可以看作指针数组名?

...组里的元素都是数组指针,可不可以这样理解?不可以,二维数组要看做“数组的数组”。(以如下定义为例:int a[4]; int * p;) 给你个对于指针和数组的正确理解吧:定义的不同:C 里,指针和数组是不同... 查看详情

怎样求一个二维数组元素之和以及二维数组元素的最小值及下标

...地址法(a[i]+j这样的)或者指针(ptr++这种)来输入输出二维数组的各个元素,然后求和最小值假设二维数组下标为0的元素最小和用指针指向该元素,后续的元素和其比较,若还有更小的则替换然后输出其值和对应的指针指针所... 查看详情

二维数组和指针

二维数组和指针⑴用指针表示二维数组元素。要用指针处理二维数组,首先要解决从存储的角度对二维数组的认识问题。我们知道,一个二维数组在计算机中存储时,是按照先行后列的顺序依次存储的,当把每一行看作一个整体... 查看详情

通过指针表示法写入二维数组

】通过指针表示法写入二维数组【英文标题】:Writingtoa2DArrayviaPointerNotation【发布时间】:2013-02-1010:10:48【问题描述】:我无法理解为什么在下面的pnArryCpy中递增指针是不正确的。我想出了如何以不同的方式使用指针表示法复制... 查看详情

c语言二级指针作为输入(二维数组|二维数组遍历|二维数组排序)(代码片段)

文章目录一、二维数组1、二维数组声明及初始化2、二维数组遍历3、二维数组排序二、完整代码示例一、二维数组前几篇博客中,介绍的是指针数组;指针数组的结构特征是,数组中的每个元素,即每个指针变量可以指向不同大小的... 查看详情

二维数组和数组指针的关系

  昨天既然写了一些关于数组指针的话题,那么今天就写一些关于数组指针的话题吧!  数组指针:这样读数组的指针,即指向数组的指针,就是数组指针,其本质就是一个指针  比如:int(*a)[3];就是一个数组指针,运用... 查看详情

c语言二级指针内存模型(指针数组|二维数组|自定义二级指针|将一二模型数据拷贝到三模型中并排序)(代码片段)

文章目录一、指针数组和二维数组数据拷贝到自定义二级指针中1、函数形参设计规则2、三种内存模型对应函数形参指针退化规则二、完整代码示例一、指针数组和二维数组数据拷贝到自定义二级指针中将指针数组和二维数组中... 查看详情

二维数组和二级指针关系浅析

...一个数组可以这样定义chara[3];分配了3个字节的内存  二维数组可以这样定义charb[3][3];分配了3* 查看详情

c语言二维数组指针变量是啥,int(*p)[2]啥意思

二维数组指针变量形式如下:类型名(*数组名)[数组行数][数组列数]如:int(*p)[2][3];//定义一个int类型的二维数组指针变量,数组中每个元素都是一个指针int(*p)[2]表示定义一个数组指针,只是是一个一维的数组指针,数组中每个元... 查看详情

二维数组名和二级指针

1.指针1.1一个指针包含两方面:a)地址值;b)所指向的数据类型。1.2解引用操作符(dereferenceoperator)会根据指针当前的地址值,以及所指向的数据类型,访问一块连续的内存空间(大小由指针所指向的数据类型决定),将这块空... 查看详情

c语言二级指针内存模型图(指针数组|二维数组|自定义二级指针内存)(代码片段)

文章目录前言一、指针数组二、二维数组三、自定义二维指针内存前言绘制如下333种二级指针的内存模型://I.指针数组char*p1[]="12","ab","34";//II.二维数组charp2[3][4]="12","ab","34";//III.自定义二... 查看详情

关于数组以为指针二维指针的应用举例

...多维数组其实最终还是以一维数组的形式实现的。就NxM的二维数组来讲,设其数组名为array。指针array指向一个数组,该数组存放的是一系列指针,这些指针分别指向相应的一维数组,而这些数组中存放的才是我们的数据。 &n... 查看详情

指针与数组——二级指针数组初始化数组打印动态二维数组

inta=10;int*p=&a;int**pp=&p;printf("%d %d ",*p,**pp);//1010//数组初始化:inta[4];//里面为未知值inta[4]={0};//初始化为0//二维数组指针intarr1[3][4]={0};int(*pArr)[4]=NULL;pArr=arr1;for(inti=0;i<3;i++){for(intj=0 查看详情

二维数组的指针

定义一个一维数组inta[3];那么他的指针是:int*p=a定义一个二维数组:intb[3][6];指针:int**P=b  //错误正确的指针是:int (*p)[6];p=b;  查看详情

c语言数组指针&数组名和数组名数组是首元素地址(两特殊情况)数组指针访问二维数组数组指针的使用。

查看详情

c语言二级指针作为输入(二维数组|抽象业务函数|二维数组打印函数|二维数组排序函数)(代码片段)

文章目录一、抽象二维数组业务函数1、二维数组打印函数2、二维数组排序函数二、完整代码示例一、抽象二维数组业务函数1、二维数组打印函数注意,二维数组作为函数参数输入到函数中,不能传入二维指针;此处遍历时,注意指... 查看详情

c语言二级指针作为输入(二维数组|二维数组内存大小计算|指针跳转步长问题)(代码片段)

文章目录一、二维数组内存大小计算二、二维数组内存大小意义一、二维数组内存大小计算给定一个二维数组:该二维数组中有444个一维数组,每个一维数组有101010个char数据;//I.二维数组chararray[4][10]="abc","123","258&... 查看详情

二维数组和它的指针

这片文章介绍二维数组inta[i][j]中的符号:a,&a[i],&a[i][j],a[i][j],&a[i][j]的含义,重点在后面第二部分的分析,但是前面第一部分的复习数组指针,指针数组和二维指针是前提,前面的不会,后面的没法理解。这片文章写的... 查看详情