二维数组如何用指针表示180
发布网友
发布时间:2024-03-06 12:39
我来回答
共5个回答
热心网友
时间:2024-07-24 07:20
二维数组用指针表示有两种方式:
一、动态数组方式。
完全由动态数据构成二维数组。如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。
热心网友
时间:2024-07-24 07:14
二维数组可以看成是指针的指针,b[][] = **b;
比如b[2][5];
它是一个2行5列的二维数组,也可以看成是二级指针,一级存放的是行指针,然后每个行指针里面其实又是指向了5个列元素。
*(*(b+i)+j),*(b+i)是先取行指针,然后+j偏移到所要的列,然后*取值就得到i行j列的数据了。
热心网友
时间:2024-07-24 07:19
二维数组实质是数组的数组
热心网友
时间:2024-07-24 07:13
* (* (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],
不知明白否?
热心网友
时间:2024-07-24 07:17
是这样的,
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,他只会继续向下(行)移动,而不会往列的方向移动的.