|
楼主 |
发表于 2003-7-30 14:48:26
|
显示全部楼层
最初由 Eelkel 发表
不错。
传引用只有在传递对象时才有优势,引用本身也需要4个字节的空间,和int是一样的,所以传int是不应该使用引用的。
真是太好了!兄弟说到我心里去了。
其实我举这个例子目的,也就是为了搞清 c++ 在处理引用时具体做了哪些动作?
以下是我的问题,表达上可能有不清楚的地方:
1、引用参数 x 和 被引用对象 i 究竟是什么关系?
2、在调用函数 f() 时,是否需要为 x 分配空间(或临时空间)?有的话放在哪个位置?
对于 "引用本身也需要 4 个字节的空间" 我不太理解.希望能具体说明.
3.引用 kj501 的话(准确地说,这里应该讲 copy):
"引用实际上是一个常量指针,不会再指向别的对象。..."
照这样理解,引用该是一个特殊的指针,是否就可以用指针来理解了?
先来看个传递指针的例子:
- //: PassByPointer.cpp
- #include <iostream>
- using namespace std;
- void f(int* p) {
- cout << "p = " << p << endl;
- cout << "*p = " << *p << endl;
- cout << "&p = " << &p << endl;
- cout << "size of p = " << sizeof(p) << " Byte" << endl;
- // Define a new variable
- int y = 150;
- cout << "y = " << y << endl;
- cout << "&y = " << &y << endl;
- // Point to new value
- p = &y;
- cout << "p = " << p << endl;
- cout << "*p = " << *p << endl;
- cout << "&p = " << &p << endl;
- cout << "size of p = " << sizeof(p) << " Byte" << endl;
- }
- int main() {
- int x = 47;
- cout << "x = " << x << endl;
- cout << "&x = " << &x << endl;
- f(&x);
- }
复制代码
屏幕输出:
x = 47
&x = 0x22ff6c
p = 0x22ff6c
*p = 47
&p = 0x22ff50
size of p = 4 Byte
y = 150
&y = 0x22ff44
p = 0x22ff44
*p = 150
&p = 0x22ff50
size of p = 4 Byte
可以看到指针也是一个变量,这里c++ 为这个整数指针分配了 4 Byte 的空间,有独立的地址,可以重新指向其它变量.
如果引用是常量指针的话(姑且允许我称之为"引用指针"),那么在哪个地方保存了它的地址呢?
按这个思路,显然无法用 &x 来得到,这样得到的是它所引用对象的地址.
这里 C++ 是否对我们做了隐瞒,由于我们没法得到这个引用指针地址,所以就无法修改里面的值以让他指向新的变量.从而有常数指针的说法?
假如我想得到这个引用指针的地址,有办法吗?
请允许我犯新手的一些常见错误,表达上和理解上的一些误区,望能不留情面指出来,也希望 c++ 玩家尽可能具体的用比较容易理解的语言或一些生动的实例来传业授道解惑,对一些专业术语,能做一些简单的解释,并提供一些良好的忠告和编程习惯,在此先谢谢热心的朋友,为你们不吝惜业余时间对论坛的无私奉献感动,我为你们骄傲. |
|