C语言怎么用指针代替二维数组

 我来答
iiiiiiiipl
2019-06-03 · TA获得超过9921个赞
知道答主
回答量:68
采纳率:66%
帮助的人:3.7万
展开全部

1.设p是指向二维数组a[m][n]的指针变量,则有:

int* p=a[0];//此时P是指向一维数组的指针。P++后,p指向 a[0][1]。

2.如果定义int (*p1)[n];p1=a;p1++后,p1指向a[1][0];  

则p+j将指向a[0]数组中的元素a[0][j]。

由于a[0]、a[1]┅a[M-1]等各个行数组依次连续存储,则对于a数组中的任一元素a[i][j],指针的一般形式如下:

p+i*N+j, 相应的如果用p1来表示,则为*(p1+i)+j。

元素a[i][j]相应的指针表示为:

*( p+i*N+j) ,相应的如果用p1来表示,则为*(*(p1+i)+j)。

同样,a[i][j]也可使用指针下标法表示,如p[i*N+j]。

若有:

int *p=a[0];

则数组a的元素a[1][2]对应的指针为:p+1*4+2

元素a[1][2]也就可以表示为:*( p+1*4+2)

用下标表示法,a[1][2]表示为:p[1*4+2]

扩展资料:

指针与数组的关系:

1.指针数组:就是一个由指针组成的数组,那个数组的各个元素都是指针,指向某个内存地址。 char *p[10];  //p是一个指针数组

2.数组指针:数组名本身就是一个指针,指向数组的首地址。注意这是一个常数。

example:

char (*p)[10];  //p是一个数组指针

3.函数指针:本身是一个指针,指向一个函数入口地址,通过该指针可调用其指向的函数,使用函数指针可实现回调函数

参考资料:

百度百科-指针

汐_枫
2013-05-21 · TA获得超过329个赞
知道小有建树答主
回答量:342
采纳率:0%
帮助的人:264万
展开全部
#include<stdio.h>
void main()
{
int i,j;
int a[3][3],*p=a[0];//相对于一维数组是一样的,a[0]本身就是一个一维数组,不要写成*p=a,写成*p=&a[0][0]也可以
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
printf("%d\n",*(p+5));//调用就直接加数字,该数字是<3*3的就行
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
memo_阿勒秋
2013-05-21 · TA获得超过143个赞
知道小有建树答主
回答量:87
采纳率:0%
帮助的人:107万
展开全部
设二维数组为typename a[M][N],则指向该数组的指针为typename (*p)[N] = a;这样就可以用p来代替二维数组了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
joseph_kitten
推荐于2017-11-28 · TA获得超过182个赞
知道答主
回答量:55
采纳率:0%
帮助的人:57.3万
展开全部
看你具体的应用,提供几个方法供参考:
1、一级指针
例:
int a[M][N];
int *p = &a[0][0];
相当于将二维数组当一维数组用,需要自己根据N的大小计算下标,使用却很灵活
2、指针数组
例:
int a[M][N];
int *p[M];
for(int i=0; i<M; i++)
{
p[i] = a[i];

}
之后用法可以跟二维数组一样,缺点在于M是固定的
3、指向数组的指针
例:
int a[M][N];
int (*p)[N];
p = a;
用起来跟二维数组没区别,缺点在于N是固定的
4、二级指针
例:
int a[M][N];
int **p;
p = (int *)malloc(sizeof(int *)*M);
for(int i=0; i<M; i++)
{
p[i] = a[i];

}
之后的用法可以跟二维数组一样,缺点在于用法比较麻烦,需要维护动态内存
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
chujiangke001
2013-05-21 · TA获得超过1605个赞
知道小有建树答主
回答量:1352
采纳率:0%
帮助的人:689万
展开全部
#include<stdlib>
#include<stdio>
void main()
{
int a[10][10];
int *p=&a[0][0];
for(int i=0;i<10*10;i++)
printf("%d",*p);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式