| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 883 人关注过本帖
标题:引用方法
只看楼主 加入收藏
wsaaa
Rank: 1
等 级:新手上路
帖 子:136
专家分:0
注 册:2007-5-8
收藏
 问题点数:0 回复次数:15 
引用方法
数组中元素的引用方法是什么啊?
搜索更多相关主题的帖子: 元素 
2007-07-05 12:47
野比
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:1627
专家分:516
注 册:2007-5-24
收藏
得分:0 

使用元素下标...
如数组
int a[N]; 共N个元素... 下标从0开始,到N-1

使用 a[下标] 来访问元素..
要知道在C/++语言中数组名称(a)..是一个指针...使用下标就是给指针加上偏移量...
这和汇编里的寻址有些类似...
实际上a[N]相当于*(a+N').. 其中N'=N*sizeof(int)
假设N=3..
则数组a[]可以这样访问..
a[0]=1;
a[1]=a[0];
a[2]=a[0]+a[1];

最后结果 a[]={1,1,2}


女侠,约吗?
2007-07-05 12:57
cclearner
Rank: 1
等 级:新手上路
帖 子:74
专家分:0
注 册:2007-6-28
收藏
得分:0 
N'=N*sizeof(int)
这是啥意思啊?
乘? 谁的size?
a[0]=1;
a[1]=a[0];
a[2]=a[0]+a[1];
第二三句是说
a[0]就代表1吗?


瓦,刚看到版主的新签名,版主注意身子哦~

好人哪,一群好人哪!!!!!!
2007-07-05 16:37
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
sizeof(类型)
得到类型占用内存大小。地址只占一个字节,所以要得到整型数组的元素。
在内存中,指针通过计算每个元素占用大小乘以第几个元素,得到指向目标元素的内存地址。


Fight  to win  or  die...
2007-07-05 16:48
cclearner
Rank: 1
等 级:新手上路
帖 子:74
专家分:0
注 册:2007-6-28
收藏
得分:0 
啊,看了20分钟, 终于明白了!!!!
好激动!
我想int 类型应该是占1个字节吧?
我的教材说得好不清楚!气死我了!

好人哪,一群好人哪!!!!!!
2007-07-05 17:09
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
int在32位机上应该是4字节吧。

你学习要多学会测试,你实际去测试下,看看结果比什么都强。

int main(){
cout << sizeof(int) << endl;
}

Fight  to win  or  die...
2007-07-05 17:13
cclearner
Rank: 1
等 级:新手上路
帖 子:74
专家分:0
注 册:2007-6-28
收藏
得分:0 

是啊,是4
可是那怎么解释这段话
int a[5];
通过数组名这个地址常量和简单的算术运算就可以访问数组元素。数组中下标为i的元素就是*(数组名+i),例如*a就是a[0],*(a+3)就是数组元素a[3]
对应上面的贴,岂不成了 int 的 size 就是1?


好人哪,一群好人哪!!!!!!
2007-07-05 17:19
cclearner
Rank: 1
等 级:新手上路
帖 子:74
专家分:0
注 册:2007-6-28
收藏
得分:0 
唉,真希望野比斑竹自己解释一下啊!

好人哪,一群好人哪!!!!!!
2007-07-05 20:47
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
回复:(cclearner)唉,真希望野比斑竹自己解释一下啊...
你还是不细心啊,野比斑竹是这个意思:

a[i] 等价 *(a+i*type_size)

如果是int型,i = 3 的话,那么这个指针的偏移量就是3*4=12
那么在内存中,p就寻址到从a[0]开始的12个字节处,那里就是a[3]。

已经很清楚了吧,我觉得。

看来你误会了,这里这样理解是告诉你执行这个操作在内存中是怎样实现的,并不是要你这样去写代码。
懂吗?相当于让你加深理解。

并不是说a[i]可以用*(a+i*type_size)去替换。
这里讲的是内部原理。
在代码中a[i] = *(a+i),就这样,至于上面说的,是计算机在做的事情。

我看到你另一个帖子中的代码,想到,你应该是误解了,对不起,没说清楚。sorry!

[此贴子已经被作者于2007-7-5 21:06:13编辑过]


Fight  to win  or  die...
2007-07-05 20:59
cclearner
Rank: 1
等 级:新手上路
帖 子:74
专家分:0
注 册:2007-6-28
收藏
得分:0 
嗯,真是不好意思,我特地看了一下书,知道了斑竹说的是内存情况,但以为是书上的代码错了,所以就很奇怪。
好感动啊,斑竹好负责啊。
我看到你另一个帖子中的代码,想到,你应该是误解了,对不起,没说清楚。sorry!
感动ing....

好人哪,一群好人哪!!!!!!
2007-07-05 21:19
快速回复:引用方法
数据加载中...
 
   



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

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