很想搞清句柄,对象的引用,指向对象的指针的关系,就是各种函数的参数具体指什么?他们之间如何转换?
解决方案 »
- exe集成
- 如何截获局域网内的所有MAC侦
- EVC开发 WIN CE5.0时的界面
- vs2005编译出的代码比vc6编译的慢,为何?
- CPtrArray 应用的问题
- 怎样实现一个进程在任务管理器地进程表里隐藏? 200求助!
- 如何调用类的成员函数做参数?急 急急!
- 请教怎么做个自动上网机
- 请问:如何实现象ACDSEE那样按可以上一张,下一张的来浏览图片
- creatprocess创建的进程自己又启动了新的子进程,如何监视该子进程
- 微软专家:如何让TreeCtrl的滚动条变为Flat状?(非微软专家另外赠与100分)
- ***************哪位兄弟知道或者有windows平台上的unix编译器,请指教或者送与小弟一个,200分送给他!!!先放50分!!!*************
就象你叫“李非”,而有人给你起个绰号叫“神腿李”,
然后有人骂“神腿李”当然就是在骂你,所以要找他拼命,初始化引用首先要有被引用的对象存在,否则....&*&%^%%..但是在传递参数时,引用传递的本质与指针相同,传递的都是变量的地址,因为在另外一个函数内,要想引用一个变量,必须得到他的地址,才能对之进行操作总之:引用与指针本质是相同的,对引用的操作就等于对被引用变量的操作
初学者常常考虑指针,但实际上使用未初始化的指针有底层的风险。例如,如果Fred对象需要移动怎么办?当Fred对象可以被安全删除时我们如何获知?如果Fred对象需要(临时的)连续的从磁盘获得怎么办?等等。这些时候的大多数,我们增加一个间接层来管理位置。例如,句柄可以是Fred**,指向Fred*的指针可以保证不会被移动。当Fred对象需要移动时,你只要更新指向Fred*的指针就可以了。或者让用一个整数作为句柄,然后在表或数组或其他地方查询Fred的对象(或者指向Fred对象的指针)。
重点是当我们不知道要做的事情的细节时,使用句柄。 使用句柄的另一个时机是想要将已经完成的东西含糊化的时候(有时用术语magic cookie也一样,就像这样,“软件传递一个magic cookie来唯一标识并定位适当的Fred对象”)。将已经完成的东西含糊化的原因是使得句柄的特殊细节或表示物改变时所产生的连锁反应最小化。举例来说,当将一个句柄从用来在表中查询的字符串变为在数组中查询的整数时,我们可不想更新大量的代码。当句柄的细节或表示物改变时,维护工作更为简单(或者说阅读和书写代码更容易),因此常常将句柄封装到类中。这样的类常重载operator-> 和 operator*算符(既然句柄的效果象指针,那么它可能看起来也象指针)。
(转载)
引用经常用于“按引用传递(pass-by-reference)”:
void swap(int& i, int& j)
{
int tmp = i;
i = j;
j = tmp;
}
int main()
{
int x, y;
// ...
swap(x,y);
}
此处的 i 和 j 分别是main中的 x 和 y。换句话说,i 就是 x —— 并非指向 x 的指针,也不是 x 的拷贝,而是 x 本身。对 i 的任何改变同样会影响 x,反之亦然。这就是作为一个程序员所认知的引用。现在,给你一个不同的角度,这可能会让你更糊涂,那就是引用是如何实现的。典型的情况下,对象 x 的引用 i 是 x 的机器地址。但是,当程序员写 i++ 时,编译器产生增加 x 的代码。更详细的来说,编译器用来寻找 x 的地址位并没有被改变。C 程序员将此认为好像是 C 风格的按指针传递,只是句法不同 (1) 将 & 从调用者移到了被调用者处,(2)消除了*s。换句话说,C 程序员会将 i 看作为宏 (*p),而 p 就是指向 x 的指针(例如,编译器自动地将潜在的指针解除引用;i++被改变为 (*p)++;i = 7 被自动地转变成 *p = 7)。
引用,其实也是指针,按thinking in C++的说法,是一种自动dereference的指针,你可以用与使用对象相同的方法来使用它,但在思想中还是应该把它想象为指针。
指针就是对象的实际地址(当然是逻辑地址)。