C语言指针问题

main(){inta[2][3]={{3,2,7},{4,8,6}};int*p,m;p=&a[0][0];m=(*p)*(*(p+2))*(*(p+4));print... main( )
{ int a[2][3]={{3,2,7},{4,8,6}};
int *p,m;
p=&a[0][0];
m=(*p)*(*(p+2))*(*(p+4));
printf(“m=%d”,m);}

m=(*p)*(*(p+2))*(*(p+4));
这一句解释
展开
 我来答
养海瑶PI
2011-01-19 · TA获得超过412个赞
知道小有建树答主
回答量:162
采纳率:0%
帮助的人:257万
展开全部
解释上面的都说得清楚了。
这个得给你补补基础:
由于二维数组的逻辑结构是一维空间,存储结构是二维空间,因此可以分别按照存储结构和逻辑结构定义指向二维数组的指针.
二维数组是按行优先的规律转换为一维线性存放在内存中的,因此,可以通过指针访问二维数组中的元素。
如果有:int a[M][N];
则将二维数组中的元素a[i][j]转换为一维线性地址的一般公式是:
线性地址=a+i×M+j
其中:a为数组的首地址, M和N分别为二维数组行和列的元素个数。
若有:int a[2][3], *p;
p = &a[0][0];

一样的 <BR>int a[3][4];

int * p = a;

然后p+((i)*4+j)
就是指向的是a[i][j] 这个元素
相当于p+X,这个X就是从a[0][0]元素开始加到指定X的位置的元素,先行,再列。
所以:*p = a[0][0];
*(p+2) = a[0][2];
*(p+4) =a[1][1];

所以结果就是m=a[0][0]*a[0][2]*a[1][1]

m=3*7*8
m = 168
chengyi988
2011-01-19 · TA获得超过178个赞
知道答主
回答量:47
采纳率:0%
帮助的人:50.6万
展开全部
分成这三块
(*p) 取内容 .................a[0][0]
(*(p+2)) p是数组首元素地址,+2的意义是:移动2个p所指类型元素的长度,及移动到a[0][2]=3
(*(p+4)) 同上, 但已经移动到数组的第二行了,是a[1][1]=8 , 最后三块相乘
二维数组在内存中是按行顺序存储的。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
康楣风0Fp
2011-01-19 · TA获得超过180个赞
知道答主
回答量:99
采纳率:0%
帮助的人:74.2万
展开全部
m=a[0][0]*a[0][2]*a[1][1]

m=3*7*8
你看一下教程中数组的指针表达就懂了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jinleileiking
2011-01-19
知道答主
回答量:19
采纳率:0%
帮助的人:0
展开全部
看着累,我绝不这么写代码
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xyzprb
2011-01-19 · TA获得超过133个赞
知道答主
回答量:139
采纳率:0%
帮助的人:70万
展开全部
p是指向二维数组中单个元素的指针,所以*p和*(p+2)和*(p+4)分别是取二维数组第一个、第三个和第五个元素的值,即:3,7,8。然后几个数一相乘就得到最后的结果了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yzyDavid
2011-01-19
知道答主
回答量:22
采纳率:0%
帮助的人:10.3万
展开全部
p指向的值乘以p+2指向的值再乘以p+4指向的值
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式