二维数组如何用指针表示
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个*号, 请懂的朋友解释下 展开
用下标方法表示如下
int b[i][j]
假设i = 0; j = 0,1,2,3,4;
用指针方法表示
* (* (b+i)+j) 演变 * (b[i]+j) 演变 (* (b+i) ) [j]
//为什么要加2个*号, 请懂的朋友解释下 展开
5个回答
展开全部
二维数组用指针表示有两种方式:
一、动态数组方式。
完全由动态数据构成二维数组。如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。
展开全部
二维数组可以看成是指针的指针,b[][] = **b;
比如b[2][5];
它是一个2行5列的二维数组,也可以看成是二级指针,一级存放的是行指针,然后每个行指针里面其实又是指向了5个列元素。
*(*(b+i)+j),*(b+i)是先取行指针,然后+j偏移到所要的列,然后*取值就得到i行j列的数据了。
比如b[2][5];
它是一个2行5列的二维数组,也可以看成是二级指针,一级存放的是行指针,然后每个行指针里面其实又是指向了5个列元素。
*(*(b+i)+j),*(b+i)是先取行指针,然后+j偏移到所要的列,然后*取值就得到i行j列的数据了。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
是这样的,
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,他只会继续向下(行)移动,而不会往列的方向移动的.
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,他只会继续向下(行)移动,而不会往列的方向移动的.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
* (* (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],
不知明白否?
* (b+i)是这个数组的行地址,
(* (b+i)+j) 是这个数组的列地址,
整个* (* (b+i)+j)才代表b[i][j]上的内容!
* (b[i]+j) 中,
b[i]就等同于*(b+i),
同理(* (b+i) ) [j]就等同于b[i][j],
不知明白否?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
二维数组实质是数组的数组
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询