注册 登录
编程论坛 C++教室

引用方法

wsaaa 发布于 2007-07-05 12:47, 892 次点击
数组中元素的引用方法是什么啊?
15 回复
#2
野比2007-07-05 12:57

使用元素下标...
如数组
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}

#3
cclearner2007-07-05 16:37
N'=N*sizeof(int)
这是啥意思啊?
乘? 谁的size?
a[0]=1;
a[1]=a[0];
a[2]=a[0]+a[1];
第二三句是说
a[0]就代表1吗?


瓦,刚看到版主的新签名,版主注意身子哦~
#4
aipb20072007-07-05 16:48
sizeof(类型)
得到类型占用内存大小。地址只占一个字节,所以要得到整型数组的元素。
在内存中,指针通过计算每个元素占用大小乘以第几个元素,得到指向目标元素的内存地址。

#5
cclearner2007-07-05 17:09
啊,看了20分钟, 终于明白了!!!!
好激动!
我想int 类型应该是占1个字节吧?
我的教材说得好不清楚!气死我了!
#6
aipb20072007-07-05 17:13
int在32位机上应该是4字节吧。

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

int main(){
cout << sizeof(int) << endl;
}
#7
cclearner2007-07-05 17:19

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

#8
cclearner2007-07-05 20:47
唉,真希望野比斑竹自己解释一下啊!
#9
aipb20072007-07-05 20:59
回复:(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编辑过]

#10
cclearner2007-07-05 21:19
嗯,真是不好意思,我特地看了一下书,知道了斑竹说的是内存情况,但以为是书上的代码错了,所以就很奇怪。
好感动啊,斑竹好负责啊。
我看到你另一个帖子中的代码,想到,你应该是误解了,对不起,没说清楚。sorry!
感动ing....
#11
天空の城2007-07-05 21:40

指针int a=0,*p=&a;
p++并不事p的值加1,系统对指针类型(一种迭代器)(在p+i的时候)都是按照p+i*sizeof(*p)实现的。
当然我们可以实现自己的迭代器,来改变这一特性。不过原理相似!

#12
wsaaa2007-07-05 21:41
回复:(cclearner)嗯,真是不好意思,我特地看了一下...

是啊,在论坛里你会发现好人很多啊,不像真实社会那样有很多坏人,而且耐心给不懂得人讲解东西的也很少啊!

#13
天空の城2007-07-05 21:42
也就是说:int a=0,*p=&a;
cout<<long(p)+1<<endl;
cout<<long(p+1)<<endl;
输出是不相同的。
#14
aipb20072007-07-05 21:43
ls补充的很好,就是这个意思。我们在做表面工作,计算机在做内部工作。
#15
野比2007-07-05 23:25
以下是引用cclearner在2007-7-5 16:37:17的发言:
N'=N*sizeof(int)
这是啥意思啊?
乘? 谁的size?
a[0]=1;
a[1]=a[0];
a[2]=a[0]+a[1];
第二三句是说
a[0]就代表1吗?


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

多谢关心.. 不好意思.. 刚完成扫尾工作.. 才从测试车间回来...
这几句例子是赋值...

#16
野比2007-07-05 23:27
多谢aipb2007, 天空の城的补充..
1