谁能帮我解释一下这道国二c++的题目?

题目是:有以下程序,输出结果()#include<iostream.h>voidmain(){staticintb[][3]={{1,2,3},{4},{56}};b[0... 题目是:有以下程序,输出结果()
#include <iostream.h>
void main()
{
static int b[][3]={{1,2,3},{4},{56}};
b[0][2]=12,b[1][2]=18;
cout<<**b<<"\t"<<**(b+1)<<"\t"<<**(b+1)<<"\t"<<*(*(b+1)+2)<<"\n";
cout<<b[0][2]+b[1][2]+b[2][2]<<endl;
}
A.1 4 4 18 B.1 1 4 4 C.4 4 18 1 D.4 4 4 30
30 18 1 1
答案是A,
但是我 不是很懂,请告诉我b[0][0] b[0][1] b[0][2] b[1][0] b[1][1] b[1][2] b[2][0] b[2][1] b[2][2]分别是多少?为什么?
为什么答案选A?
展开
 我来答
潮运虹0K
2013-02-04 · TA获得超过514个赞
知道小有建树答主
回答量:195
采纳率:0%
帮助的人:174万
展开全部
这么晚了还在学习,不简单
首先分析前两句:
static int b[][3]={{1,2,3},{4},{56}};
b[0][2]=12,b[1][2]=18;

用矩阵的思维理解一下(二维数组就是矩阵)
意思就是:
矩阵b =
1, 2, 12
4, 0, 18
5, 6, 0

考虑到矩阵b的元素排列:
b =
b[0][0],b[0][1],b[0][2]
b[1][0],b[1][1],b[1][2]
b[2][0],b[2][1],b[2][2]

因此

**b 就是 * ( b[0] ) 就是 b[0][0] = 1;
**(b + 1) 就是 *( b[1] ) 就是 b[1][0] = 4;

*( *(b+1) + 2) 就是 *( b[1] + 2) 就是 b[1][2] = 18;

所以此句:cout<<**b<<"\t"<<**(b+1)<<"\t"<<**(b+1)<<"\t"<<*(*(b+1)+2)<<"\n";
输出:1 4 4 18

因为 b[0][2] = 12;b[1][2] = 18; b[2][2] = 0;
所以此句:cout<<b[0][2]+b[1][2]+b[2][2]<<endl; 就是 cout << 12 + 18 + 0 << endl;
输出:
30

回答的这么直观了,如果再不理解,佛祖也救不了你了,记住一定要采纳
likey3
2013-02-04 · TA获得超过292个赞
知道小有建树答主
回答量:205
采纳率:0%
帮助的人:235万
展开全部
b[0][0] b[0][1] b[0][2] b[1][0] b[1][1] b[1][2] b[2][0] b[2][1] b[2][2]分别是1 2 12 4 N 18 56 N N

N代表未赋值
**b肯定就是 b[0][0]了
**(b+1)就是将b偏移一个单位,而这个单位是多少根据b的性质而定,此时b是一个三行3列的二维数组 于是就移动列数个整形单位 自己好好算算 现在应该是输出b[1][0]了
*(*(b+1)+2和上面类似 *(b+1) 就应该是 b[1][0]的地址,注意是地址 再加二就是在b[1][0]的地址的基础上移动两个整形单位指针就是b[1][2]了

呵呵 新手对这个确实会很困惑的 多做做类似的联系

手打不容易 记得给分啊 不懂追问
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cdyzxy
2013-02-04 · TA获得超过2.1万个赞
知道大有可为答主
回答量:1.4万
采纳率:85%
帮助的人:4612万
展开全部
static int b[][3]={{1,2,3},{4},{56}};
b[0][0]=1 b[1][0]=4 b[2][0]=56

b[0][1]=2 b[1][1]=0 b[2][1]=0
b[0][2]=3 b[1][2]=0 b[2][2]=0
b[0][2]=12,b[1][2]=18

b[0][0]=1 b[1][0]=4 b[2][0]=56
b[0][1]=2 b[1][1]=0 b[2][1]=0
b[0][2]=12 b[1][2]=18 b[2][2]=0
由于定义b是双下标数组名(相当于int **b),它总是指向该数组第一个整型数据,
所以**b为第一个数b[0][0]位置;可以写成*b[0],注意这个0对应定义中的第一个下标
**(b+1)相当于b[1][0]; 在寻址时将1乘以第二下标的数字取得偏移,相当于*(b+1*3+0)
*(*(b+1)+2): 相当于b[1][2],x=*(b+1)寻址到该数据第1行,*(x+2)取得这行的第2个数据
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友1b13c83eb
2013-02-04 · TA获得超过466个赞
知道小有建树答主
回答量:279
采纳率:0%
帮助的人:138万
展开全部
初始状态:
1,2,3;
4,0,0;
56,0,0;
赋值后:
1,2,12;
4,0,18;
56,0,0;
**b意为b[0][0];
**(b+1)意为b[1][0];
*(*(b+1)+2)意为b[1][2];
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
帐号已注销
2013-02-04 · TA获得超过220个赞
知道小有建树答主
回答量:499
采纳率:0%
帮助的人:212万
展开全部
执行完static int b[][3]={{1,2,3},{4},{56}}; 二维数组为

1 2 3
4 0 0
5 6 0
执行b[0][2]=12,b[1][2]=18;

1 2 12
4 0 18
5 6 0
对应二维数组下标
b[0][0] b[0][1] b[0][2]
b[1][0] b[1][1] b[1][2]

b[2][0] b[2][1] b[2][2]

**b即b[0][0] = 1;**(b+1)即b[1][0] = 4; *(*(b+1)+2)即b[1][2] = 18;

建议楼主看看二维数组与指针关系
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式