C语言二维数组的问题

书上说a[2][3]表示第二行第三列的元素但C语言中下标不是从0开始计算的吗应该是第三行第四列啊... 书上说a[2][3]表示第二行第三列的元素
但C语言中下标不是从0开始计算的吗 应该是第三行第四列啊
展开
 我来答
xxb090226y
2010-11-21 · TA获得超过282个赞
知道答主
回答量:87
采纳率:0%
帮助的人:58.4万
展开全部
1 2 3 4
6 6 7 8
6 4 5 7
a[0][0]=1,a[0][1]=2,a[0][2]=3,a[0][3]=4
a[1][0]=6,a[1][1]=6,a[1][2]=7,a[1][3]=8
a[2][0]=6,a[2][1]=4,a[2][2]=5,a[2][3]=7
你应该一个一个标上就不会犯错误啦,你的书没看透啊,书上这方面的知识都有,好好看书吧。书看透了就明白了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
luozhan310023
2010-11-21 · 超过22用户采纳过TA的回答
知道答主
回答量:102
采纳率:0%
帮助的人:41万
展开全部
a[2][3]是不存在的,a[2][3]只有a[0][0],a[0][1],a[0][2],a[1][0],a[1][1],a[1][2]
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2010-11-21
展开全部
你的理解是正确的,书上的说法有误。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
mjxaa11
2010-11-25 · TA获得超过4291个赞
知道小有建树答主
回答量:2016
采纳率:25%
帮助的人:1228万
展开全部
试着给解释一下吧:

int i[3] = ;相信你明白它就是3个整数,一个接一个放在内存中。

我们假设有一种类型叫MyType,它占用12个字节。那么我们也可以定义一个数组

Mytype a[2] = ;

它就是两个MyType,一个接一个放在内存之中。

那么我现在跟你讲我需要第二个MyType的指针,那显然应该是&a[1],或者a+1,没错吧?而a[1]或者*(a+1)是什么呢?当然就是MyType啦。

好了,现在我们说清楚,这个MyType跟前面那个数组i是一样的,那么这个定义就是:

int a[2][3] = { , };

怎么理解呢?a[1]是什么呢?当然它是一个int [3],即三个整数组成的数组,我们可以再加一重中括号来取它里面的单个元素的值,即a[1][0]到a[1][2]分别表示4,5,6. 那现在你该明白a[1]也被看成地址了吧?a[1]也可以写成*(a+1)。

且慢,a+1和*(a+1)都是地址,那它们是一样的吗?我跟你讲,它们的值是一样的,不信你可以printf出来看看。但是,它们的含义又是不一样的,如果你把它们加1的话,a+1+1会被编译器处理成a+2,即&a[2],它已经刚好越界了。但是*(a+1)+1会被编译器处理成a[1]+1,即&a[1][1],它指向第二个数组的第二个元素(5)。

所以总结起来就是它们都是地址,但是编译器知道它们是不同的含义,在增量的时候所步进的量是不同的。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式