| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3596 人关注过本帖, 3 人收藏
标题:鉴定你有没学会数组
只看楼主 加入收藏
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
结帖率:90%
收藏(3)
 问题点数:0 回复次数:38 
鉴定你有没学会数组
发现今天(昨天?)有人发了这个帖子。所以我也来凑凑热闹。
题目中的数组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
bianfeng
Rank: 1
等 级:新手上路
帖 子:199
专家分:0
注 册:2007-11-28
收藏
得分:0 
看看我有没有合格
1.(a+1)[2]          值是4   a的地址+3的值
2.(a-1)[1]            1      a的地址-1再加1
3.(*a)[a]               2     *a值是1也就是a[0]的值,a的值是1
4.(&a)[0][1]              
5.(&a)[1]-a

欢迎长期在线的朋友加入此群:21135958
2008-05-10 08:06
bianfeng
Rank: 1
等 级:新手上路
帖 子:199
专家分:0
注 册:2007-11-28
收藏
得分:0 
11.void func(int*);     传送的是地址
    12.void func(int(&)[4]);      相当于 (*a)[4] 指向二维数组的指针
    13.void func(int*&);          传送的是值..是值传递  运算符是左结合.先取地址..再*指针运算把该地址的值
    14.void func(int(&)[3][3]);   这个好像不清楚

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

欢迎长期在线的朋友加入此群:21135958
2008-05-10 08:10
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
bianfeng
Rank: 1
等 级:新手上路
帖 子:199
专家分:0
注 册:2007-11-28
收藏
得分:0 
汉...理解错了

欢迎长期在线的朋友加入此群:21135958
2008-05-10 09:00
windk
Rank: 1
来 自:北京联合大学
等 级:新手上路
帖 子:43
专家分:0
注 册:2008-5-4
收藏
得分:0 
我学了,可是不会。。。。
期待楼主的正解
好好学习
收到的鲜花
  • liyanhong2008-05-10 10:28 送鲜花  2朵   附言:精品文章
2008-05-10 10:22
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
正解?你可以自己写程序运行看看啊……

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-05-10 10:26
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
(a-1)[1]==>a[0];
    (*a)[a]==>a[*a]==>a[1];
    (&a)[0][1]=>(*(&a +0))[1]=a[1];
    (&a)[1]-a==>*(&a+1)-a;

学习需要安静。。海盗要重新来过。。
2008-05-10 10:48
windk
Rank: 1
来 自:北京联合大学
等 级:新手上路
帖 子:43
专家分:0
注 册:2008-5-4
收藏
得分:0 
#include <stdio.h>
void main()
{
    int a[10]={1,2,3,4,5,6,7,8,9,10};
    printf("%d\n",(a+1)[2]);
    printf("%d\n",(a-1)[1]);
    printf("%d\n",(*a)[a]);
    printf("%d\n",(&a)[0][1]);
    printf("%d\n",(&a)[1]-a);    
}
结果
4
1
2
2
10
结论对不对?
(a+1)[2] == a[2+1]
(a-1)[1] == a[1-1]
后边三个还行lz指点
(*a)[a]
(&a)[0][1]
(&a)[1]-a
2008-05-10 10:52
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
sun,最后一个的值是多少?

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



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

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