| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3594 人关注过本帖, 3 人收藏
标题:鉴定你有没学会数组
取消只看楼主 加入收藏
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
结帖率:90%
收藏(3)
 问题点数:0 回复次数:11 
鉴定你有没学会数组
发现今天(昨天?)有人发了这个帖子。所以我也来凑凑热闹。
题目中的数组a的定义为:
int a[10]={1,2,3,4,5,6,7,8,9,10};
首先是初级班,能指出本组表达式的[bo]值[/bo]的朋友,对数组有了初步的了解:
    1.(a+1)[2]
    2.(a-1)[1]
    3.(*a)[a]
    4.(&a)[0][1]
    5.(&a)[1]-a

然后是中级班,能指出本组表达式的[bo]值[/bo]的朋友,对数组内存分布以及索引运算符的特点有了较深了解:
    6.((int(*)[4])a)[1][2]
    7.(*((int(*)[4])a+1))[1]
    8.((int(*)[4])a+1)[1][1]
    9.(*(int(*)[4])a)[2]
    10.(*a)[(int(*)[4])a][((int(*)[4])a)[0][2]]

最后是高级班,能够写出[bo]将a传给下面函数的正确表达式[/bo]的朋友,对数组和指针的区别有了较深了解:
    11.void func1(int*);
    12.void func2(int(&)[4]);
    13.void func3(int*&);
    14.void func4(int(&)[3][3]);

以上所有表达式,都在GCC+VC9下编译测试通过。少数可能会有标准化的问题:C/C++标准规定指向数组外的指针其值未定义,比如对于a,a+10的值未定义。因为假设a的地址刚刚好是内存最后十个int的位置,a+10就会因为地址溢出而等于0了——虽然标准承诺0不会分配给任何变量。这里只是说明未定义的情况下任何可能都会发生而已。但是在实际使用中,大家一定不会写出这种代码。我们假设不会发生上述情况。只要能说出值的由来,就算通过。
为了以示区别,函数名字后加入数字。
大家不妨跟帖给出自己的答案~~~~

[[it] 本帖最后由 StarWing83 于 2008-5-10 08:59 编辑 [/it]]
搜索更多相关主题的帖子: int 内存 鉴定 学会 本组 
2008-05-10 05:23
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
能够写出正确将a传给下面函数的表达式
比如第一个,答案是func(a);直接将a传给func。LS没理解题意啊……

Orz……是不是我要求太高了……楼上的解释是什么啊……晕了……那些是函数声明啊……有这样解释的么………………

[[it] 本帖最后由 StarWing83 于 2008-5-10 08:38 编辑 [/it]]

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-05-10 08:36
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
正解?你可以自己写程序运行看看啊……

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-05-10 10:26
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
sun,最后一个的值是多少?

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-05-10 10:53
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
OKOK……windk发上来了初级组的答案……那就当我没问好了………………

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-05-10 10:55
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
int*p=a;func3(p);//尝试过很多方法,始终没办法成功传引用,只能这样了。

func3((int*&)a);GCC编译错误,VC编译正确但运行期异常(并且无法得到a的值)。
其实是因为a最多只能退化为int*const,无法被int*引用。这个是没有办法改变的。正确答案如上。

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-05-11 01:00
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
看样子中学者应该属于中级的范畴……不过挺可怜的,每组都做错一道题……看来只能算是初级了(哈哈~~)

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-05-11 01:01
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
Orz...我没仔细看中学者的答案……算了,我贴自己答案得了……
    func1(a);
    func2(*(int(*)[4])a);
    int*p=a;func3(p);//尝试过很多方法,始终没办法成功传引用,只能这样了。
    func4(*(int(*)[3][3])a);

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-05-11 01:08
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
除了这四个,其余的中学者的答案是正确的。

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-05-11 01:09
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
Orz,还带改题目的……怎么可以这样……反正答案就是那样,先赋给一个p然后XXX……

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-05-11 14:14
快速回复:鉴定你有没学会数组
数据加载中...
 
   



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

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