二维数组如何用指针表示

intb[2][5]用下标方法表示如下intb[i][j]假设i=0;j=0,1,2,3,4;用指针方法表示*(*(b+i)+j)演变*(b[i]+j)演变(*(b+i)... int b[2][5]
用下标方法表示如下
int b[i][j]
假设i = 0; j = 0,1,2,3,4;
用指针方法表示
* (* (b+i)+j) 演变 * (b[i]+j) 演变 (* (b+i) ) [j]
//为什么要加2个*号, 请懂的朋友解释下
展开
 我来答
风若远去何人留
2017-06-20 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450106
专业C/C++软件开发

向TA提问 私信TA
展开全部

二维数组用指针表示有两种方式:

一、动态数组方式。 

完全由动态数据构成二维数组。如M行N列的数组,先分配M个一维指针空间,然后在每个一维指针上分配N个元素的空间,即成为动态二维数组。

和普通数组不同,这种动态二维数组的各行之间地址并不连续。

参考代码:

#include<stdlib.h>
int **create(int m, int n)//创建m行n列的二维数组。
{
    int **r;
    int i;
    r=(int **)malloc(sizeof(int *) *m);//分配m个int*指针内存。
    for(i = 0; i < m; i ++)//遍历每行
        r[i] = (int *)malloc(sizeof(int)*n);//每行分配n个int型元素。
    return r;//返回地址值。
}

二、通过数组指针指向已有二维数组。

对于已经定义好的M行N列数组,可以使用指向N个元素的数组指针,指向该数组并访问。 

参考代码:

int a[10][5];
int (*p)[5];//每行5个元素的数组指针。
p=a;//把p指向a。
Xmoon_Sun
2012-07-29 · TA获得超过331个赞
知道答主
回答量:35
采纳率:0%
帮助的人:27.7万
展开全部
二维数组可以看成是指针的指针,b[][] = **b;
比如b[2][5];
它是一个2行5列的二维数组,也可以看成是二级指针,一级存放的是行指针,然后每个行指针里面其实又是指向了5个列元素。
*(*(b+i)+j),*(b+i)是先取行指针,然后+j偏移到所要的列,然后*取值就得到i行j列的数据了。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
THEANARKH2
2012-07-29 · 超过11用户采纳过TA的回答
知道答主
回答量:36
采纳率:0%
帮助的人:28.2万
展开全部
是这样的,
int b[2][3]={1,2,3,4,5,6};这里假设i=1;
b+1代表移到下一行,但他的类型是(*p)[3](这个你通过把b+1赋值给*p[3],再试一下赋给*p就知道了);第一个星号后代表他指向刚刚移到的那行的第一个元素地址,再+j就是横向移到j列得到b[1][j]的地址,最后一个星号是取他的值.这是我的分析. //如果你不加里面那个星号,就是(b+i)+j,他只会继续向下(行)移动,而不会往列的方向移动的.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
mao52er
2012-07-29 · TA获得超过121个赞
知道答主
回答量:13
采纳率:0%
帮助的人:14.7万
展开全部
* (* (b+i)+j) 中,
* (b+i)是这个数组的行地址,
(* (b+i)+j) 是这个数组的列地址,
整个* (* (b+i)+j)才代表b[i][j]上的内容!

* (b[i]+j) 中,
b[i]就等同于*(b+i),
同理(* (b+i) ) [j]就等同于b[i][j],

不知明白否?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
_Tomoyo
2012-07-29 · TA获得超过148个赞
知道小有建树答主
回答量:250
采纳率:0%
帮助的人:186万
展开全部
二维数组实质是数组的数组
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式