| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 550 人关注过本帖
标题:[讨论] 数组
只看楼主 加入收藏
nianshi
Rank: 1
等 级:新手上路
帖 子:199
专家分:0
注 册:2007-11-7
收藏
得分:0 
回复:(mebol)[讨论] 数组
-- 作者:mebol
-- [讨论] 数组
若有以下定义和语句:
static int w[2][3],(*pw)[3];
pw=w;
则对w数组元素的非法引用是:
A:*(pw[0]+2) B: *(pw+1)[2] C: pw[0][0] D: *(pw[1]+2)
请大家写详细点为什么是?为什么不是?谢谢
分析:
w是二维数组,pw是行指针。
A:pw[0]相当于w[0]->*(a[0]+2)我们知道a[0]代表w第一行的首地址,所以a[0]+2,就是w第一行第三个元素的地址,再*(a[0]+2),就是引用元素[0][2].
B: *(pw+1)[2]->*(pw[0]+1)[2]这里*(pw[0]+1)按上面分析就已经是引用w[0][1]了,所以再加个[2]就多余了。
C:pw[0][0]->a[0][0]这应该没问题吧
D:*(pw[1]+2)分析同A相当于第二行第三个元素,即w[1][2].

行至水穷处 坐看去起时
C语言QQ群1:51871776  群2:26313099  群3:47145282
2007-11-08 14:46
静思
Rank: 3Rank: 3
来 自:沈阳
等 级:新手上路
威 望:8
帖 子:630
专家分:0
注 册:2006-2-28
收藏
得分:0 
答案是B
*(pw+1)[2]这个有错误,由于[]的优先级高于*,所以该式子等价于*(*(pw+1+2)),即*(*(pw+3))=pw[3][0],数组越界了
其他的正确
*(pw[0]+2)等价于pw[0][2]
*(pw[1]+2)等价于pw[1][2]


英者自知,雄者自胜
2007-11-08 14:53
死了都要C
Rank: 4
来 自:四川成都
等 级:贵宾
威 望:13
帖 子:1582
专家分:116
注 册:2006-12-7
收藏
得分:0 

( *(pw+1) ) [2]

这样改的话``B对吗``

女施主``我给你``送茶来了```师太``你就从了老衲吧``
代码本天成~~~妙头偶得之```
2007-11-08 14:53
静思
Rank: 3Rank: 3
来 自:沈阳
等 级:新手上路
威 望:8
帖 子:630
专家分:0
注 册:2006-2-28
收藏
得分:0 
回复:(死了都要C)( *(pw+1) ) [2]这样改的话``B对吗...
这样就对了,*(pw+1)代表第二行的行指针,(*(pw+1))[2]就表示引用该行第三列的数值

[此贴子已经被作者于2007-11-8 15:03:17编辑过]


英者自知,雄者自胜
2007-11-08 14:57
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
以下是引用nianshi在2007-11-8 14:46:27的发言:
-- 作者:mebol
-- [讨论] 数组
若有以下定义和语句:
static int w[2][3],(*pw)[3];
pw=w;
则对w数组元素的非法引用是:
A:*(pw[0]+2) B: *(pw+1)[2] C: pw[0][0] D: *(pw[1]+2)
请大家写详细点为什么是?为什么不是?谢谢
分析:
w是二维数组,pw是行指针。
A:pw[0]相当于w[0]->*(a[0]+2)我们知道a[0]代表w第一行的首地址,所以a[0]+2,就是w第一行第三个元素的地址,再*(a[0]+2),就是引用元素[0][2].
B: *(pw+1)[2]->*(pw[0]+1)[2]这里*(pw[0]+1)按上面分析就已经是引用w[0][1]了,所以再加个[2]就多余了。
C:pw[0][0]->a[0][0]这应该没问题吧
D:*(pw[1]+2)分析同A相当于第二行第三个元素,即w[1][2].

pw + 1 = &(w[0][0]) + 3 * sizeof(int)

或可以这样分析
*(pw + 1)[2];

pw = pw + 1 ; /* pw[1] */
*pw[2]; /* [] 运算符的优先级 比 * 高 */




—>〉Sun〈<—
2007-11-08 15:00
快速回复:[讨论] 数组
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.058106 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved