0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

嵌入式技术 来源:嵌入式技术 作者:嵌入式技术 2022-08-16 09:02 次阅读

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

二维数组定义
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(buff)>
  • 示例二
#include 
int main()
{
	int buff[][3]={1,2,3,4,5,6};//每行有3个元素
	int *p=buff[0];
	int i;
	for(i=0;i(buff)>

二维数组作为形参处传入

  • 以数组方式传入
#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;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;i++)>

数组指针
定义: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]
}

指针数组
定义: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是错误的。

二维数组通过二维指针方式传入
示例一:

#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;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(buff)>

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 指针
    +关注

    关注

    1

    文章

    473

    浏览量

    70361
  • 数组指针
    +关注

    关注

    0

    文章

    5

    浏览量

    5204
收藏 人收藏

    评论

    相关推荐

    C语言中指针数组数组指针的区别

    指针数组之间存在着紧密的关系。在本文中,我们将探讨指针数组的关系、指针算术和数组遍历、多维
    发表于 08-17 15:29 280次阅读

    指针数组数组指针的区别

    int (*p)[4];// 定义一个数组指针,指向含4个元素的一数组数组元素是int类型。int *p[4];// 定义一个
    发表于 07-15 21:41

    问一个二维数组指针的问题?

    比如定义一个二维数组int a[3][5], 我们知道a是这个二维数组的首地址,a[0]是第一行元素的首地址,假设这个二维
    发表于 05-09 11:28

    数组指针的详细讲解

    数组指针的详细讲解
    发表于 10-16 08:44 0次下载

    二维数组指针指向错误应该如何纠正

    本文档的主要内容详细介绍的是二维数组指针指向错误应该如何纠正。
    发表于 12-13 16:01 12次下载
    <b class='flag-5'>二维</b><b class='flag-5'>数组</b>的<b class='flag-5'>指针</b>指向错误应该如何纠正

    详谈数组指针的区别与联系

    详谈数组指针的区别与联系
    的头像 发表于 06-29 15:18 2.2w次阅读
    详谈<b class='flag-5'>数组</b>和<b class='flag-5'>指针</b>的区别与联系

    指针数组数组指针的区别

    这里我们区分两个重要的概念:指针数组数组指针
    的头像 发表于 06-29 15:30 1.9w次阅读
    <b class='flag-5'>指针</b><b class='flag-5'>数组</b>和<b class='flag-5'>数组</b><b class='flag-5'>指针</b>的区别

    理解函数指针、函数指针数组、函数指针数组指针

    理解函数指针、函数指针数组、函数指针数组指针
    的头像 发表于 06-29 15:38 1.4w次阅读
    理解函数<b class='flag-5'>指针</b>、函数<b class='flag-5'>指针</b><b class='flag-5'>数组</b>、函数<b class='flag-5'>指针</b><b class='flag-5'>数组</b>的<b class='flag-5'>指针</b>

    C语言中指针数组

    #define SIZE 10int arry[SIZE]={0,1,2,3,4,5,6,7,8,9}; //数组名arry表示数组首元素的地址*int p,temp;//可直接初始化定义指针
    发表于 01-13 13:11 3次下载
    C语言中<b class='flag-5'>指针</b>与<b class='flag-5'>数组</b>

    C语言指针数组的区别

    在C语言教程中我们使用通过数组名通过偏移和指针偏移都可以遍历数组,那么指针数组到底有什么区别??
    的头像 发表于 07-18 16:29 1548次阅读

    【C语言进阶】“数组指针”和“指针数组”都是啥跟啥?

    【C语言进阶】“数组指针”和“指针数组”都是啥跟啥?
    的头像 发表于 08-31 13:21 1675次阅读

    如何用指针数组数组指针来表示二维数组

    a是一个二维数组,3 行 4 列,一共 12 个元素。
    的头像 发表于 03-06 11:38 849次阅读

    C语言中什么是指针数组

    在C语言中一个数组,若其元素均为指针类型数据,称为指针数组,也就是说,指针数组中的每一个元素都存
    的头像 发表于 03-10 15:26 1275次阅读

    数组指针不能混用的情况

    数组指针不能混用的情况  数组指针是 C/C++ 中非常常见的特性和概念。然而,在某些情况下,数组
    的头像 发表于 12-07 13:46 311次阅读

    数组指针不相同吗?数组指针有哪些区别

    数组就是指针指针就是数组,这样的言论在评论区看到不下于10次。
    的头像 发表于 12-13 16:34 355次阅读
    <b class='flag-5'>数组</b>和<b class='flag-5'>指针</b>不相同吗?<b class='flag-5'>数组</b>和<b class='flag-5'>指针</b>有哪些区别