C语言数组指针问题? 50
设有如下数组定义:inta[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}};计算下面各项的值(设数组a的首地址为2000,一个i...
设有如下数组定义: int a[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}}; 计算下面各项的值(设数组a的首地址为2000,一个int类型数占四个字节)。
(1)a[2][1] (2)a[1] (3)a (4)a+1
(5)*a+1 (6)*(a+1) (7)a[2]+1 (8)*(a+1)+1
(9)*(*(a+2)+2) 展开
(1)a[2][1] (2)a[1] (3)a (4)a+1
(5)*a+1 (6)*(a+1) (7)a[2]+1 (8)*(a+1)+1
(9)*(*(a+2)+2) 展开
6个回答
展开全部
首先你要明白一点,数组名和指针本质上是一回事,都是地址,该数组的首地址。知道这一点后就可以活学活用了。这是c语言的精髓。
比如你定义了int
*p,a[10];并且让p=a;,
这个操作叫做指针p指向了数组a,其本质是给p这个变量付了一个值,就是数组a的地址,也是a[0]的地址,也是a本身里面存储的内容。
那么要引用a[i],你可以有很多种写法,比如*(a+i),
*(p+i),
p[i],都是等效的。
p++的含义其实不是p=p+1,至少有时不是,p++的操作其实是让p指向下一个元素,也就是原来p指向的是a[0],那么现在p指向a[1]了。由于a是int类型,站4个字节,那么p++这个操作其实是让p的内容增加了4。不要问为什么,c语言就是这么规定的。如果p指向的是一个char类型,那么p++就使p的值增加1。
比如你定义了int
*p,a[10];并且让p=a;,
这个操作叫做指针p指向了数组a,其本质是给p这个变量付了一个值,就是数组a的地址,也是a[0]的地址,也是a本身里面存储的内容。
那么要引用a[i],你可以有很多种写法,比如*(a+i),
*(p+i),
p[i],都是等效的。
p++的含义其实不是p=p+1,至少有时不是,p++的操作其实是让p指向下一个元素,也就是原来p指向的是a[0],那么现在p指向a[1]了。由于a是int类型,站4个字节,那么p++这个操作其实是让p的内容增加了4。不要问为什么,c语言就是这么规定的。如果p指向的是一个char类型,那么p++就使p的值增加1。
展开全部
(1)a[2][1]是数组内的值,即第4行第3个 =9
(2)a[1]是指第2行首地址,即2000+16=2016 其中16是4*4
(3)a是首地址和a[0]相同 ,即题目的2000
(4)a+1和(2)相同 ,即2016
(5)*a+1 是第1行的第2列地址与*a[0][0]相同 即 2000+4=2004
(6)*(a+1) 指取a+1的地址和(2)(4)相同 即2016
(7)a[2]+1指第3行第2列的地址:2000+2*(4*4)+4=2036
(8)*(a+1)+1 在(6)的基础上取后一个的地址 2016+4=2020
(9)*(*(a+2)+2) 这里分两部分读取。*(a+2)+2 输出的是地址,在这基础上再指向也就是说*(*(a+2)+2) 是要我们输出*(a+2)+2 这个地址指向的值。 *(a+2)+2是数组的第3行第3列 即 21
综上答案为:
(1)19 (2)2016 (3)2000 (4)2016 (5)2004 (6)2016 (7) 2036
(8)2020 (9)21
我也是最近自学的C可能说法上会有些不正确
(2)a[1]是指第2行首地址,即2000+16=2016 其中16是4*4
(3)a是首地址和a[0]相同 ,即题目的2000
(4)a+1和(2)相同 ,即2016
(5)*a+1 是第1行的第2列地址与*a[0][0]相同 即 2000+4=2004
(6)*(a+1) 指取a+1的地址和(2)(4)相同 即2016
(7)a[2]+1指第3行第2列的地址:2000+2*(4*4)+4=2036
(8)*(a+1)+1 在(6)的基础上取后一个的地址 2016+4=2020
(9)*(*(a+2)+2) 这里分两部分读取。*(a+2)+2 输出的是地址,在这基础上再指向也就是说*(*(a+2)+2) 是要我们输出*(a+2)+2 这个地址指向的值。 *(a+2)+2是数组的第3行第3列 即 21
综上答案为:
(1)19 (2)2016 (3)2000 (4)2016 (5)2004 (6)2016 (7) 2036
(8)2020 (9)21
我也是最近自学的C可能说法上会有些不正确
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
数组指针的基本概念,参考楼上的,难怪有一个错误,难怪提交不上去。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
(1) 19
(2) 0x2010
(3) 0x2000
(4) 0x2010
(5) 0x2004
(6) 0x2010
(7) 0x2024
(8) 0x2014
(9) 21
(2) 0x2010
(3) 0x2000
(4) 0x2010
(5) 0x2004
(6) 0x2010
(7) 0x2024
(8) 0x2014
(9) 21
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1、19;
2、a[1]为第二行的首地址,为2000+4*4=2016;
3、a为数组首地址:2000;
4、a+1相当于a[1],2016;
5、2004
6、2016
7、2036
8、2020
9、21
2、a[1]为第二行的首地址,为2000+4*4=2016;
3、a为数组首地址:2000;
4、a+1相当于a[1],2016;
5、2004
6、2016
7、2036
8、2020
9、21
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询