c语言中,关于指针int(*p)[4]和int*p指向二维数组a[3][4]初始化的问题。

 我来答
匿名用户
2014-01-01
展开全部
二维数组相当于多行列数相同的一位数组组合起来;int (*p)[N]定义一个行指针p,其中:
p指向一个N列二维数组的首地址
p自增1,p指向下一“行”一维数组的首地址
因为p是一个二级指针。
所以索引其指向的数据内容需要取二次内容,格式及解释如下:
格式:*(*(p+行)+列)
解释:
其实很好理解,因为p作为二级指针,p++代表的仅仅是行号+1所以格式中*(p+行)就取到了所在行首地址指针(因为p是二级指针,取一次内容之后,取到的内容还是指针)现在把*(p+行)整体看作一个一维数组指针再进行一位数组的指针内容索引*(*(p+行)+列)就能索引到内容,当然也能进行初始化了!

例子:

#include<stdio.h>

void main()
{
int (*p)[4];
int a[3][4],i,j;

/*常规的初始化与输出*/
printf("input:\n");
for(i=0;i<3;i++)
for(j=0;j<4;j++)
scanf("%d",&a[i][j]);

printf("二维数组\n:");
for(i=0;i<3;i++){
for(j=0;j<4;j++)
printf("%d\t",a[i][j]);
printf("\n");
}

/*用行指针的初始化与输出*/
p=a;
printf("input:\n");
for(i=0;i<3;i++)
for(j=0;j<4;j++)
scanf("%d",*(p+i)+j);

printf("二维数组\n:");
for(i=0;i<3;i++){
for(j=0;j<4;j++)
printf("%d\t",*(*(p+i)+j));
printf("\n");
}

}

结果
匿名用户
2014-01-01
展开全部
还是我来告诉你吧!前者是二级地址,就是地址的地址。后者是一级地址,虽然指向的也是一个地址,但是定义的时候申明的是一级地址。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-01-01
展开全部
int (*p)[4];
数组指针,每个元素都是指针, 每个元素可以指向一个一维数组
int * p
指针, 指向一维数组
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-01-01
展开全部
int (*p)[4];p=a;int *p;p=a[i];//(i=0,1,2)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式