C语言二维数组的问题
书上说a[2][3]表示第二行第三列的元素但C语言中下标不是从0开始计算的吗应该是第三行第四列啊...
书上说a[2][3]表示第二行第三列的元素
但C语言中下标不是从0开始计算的吗 应该是第三行第四列啊 展开
但C语言中下标不是从0开始计算的吗 应该是第三行第四列啊 展开
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
你应该一个一个标上就不会犯错误啦,你的书没看透啊,书上这方面的知识都有,好好看书吧。书看透了就明白了
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
你应该一个一个标上就不会犯错误啦,你的书没看透啊,书上这方面的知识都有,好好看书吧。书看透了就明白了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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
展开全部
你的理解是正确的,书上的说法有误。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
试着给解释一下吧:
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)。
所以总结起来就是它们都是地址,但是编译器知道它们是不同的含义,在增量的时候所步进的量是不同的。
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)。
所以总结起来就是它们都是地址,但是编译器知道它们是不同的含义,在增量的时候所步进的量是不同的。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询