当前位置: 首页 > 图文教程 > 开发语言 > VC++ > Pointers 与 References(二)

VC++
几个数字信号处理算法程序
简易软盘镜像工具的实现及操作系统编写初步
教你使用正则表达式
C++ 扩展和嵌入 Python
拷贝构造和赋值操作符,C#和本机 C++ 代码的互用性
精通VC与Matlab联合编程(六)
精通VC与Matlab联合编程(五)
一个排序用的C++函数模板
浅析VC与MATLAB联合编程
C++编译器如何实现异常处理
文件重定义冲突的分析与解决
一步一步实现MFC扩展DLL中导出类和对话框
C宏:智者的利刃,愚者的恶梦!
引用的作用
《UTF-8与GB2312之间的互换》的改进
程序风格的要素-C++风格指南
VC+6.0实现文本串的自由拆分
怎样给串行化类分配版本号(可配置版本模式)
在常规的编程任务中使用新的 <tuple> 库
使用 typedef 抑制劣质代码

VC++ 中的 Pointers 与 References(二)


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 37 ::
收藏到网摘: n/a

Pointers 与 References(二)


编译:肖德时

     第一部分

16.4 赋值pointers和references.

    就像你看到使用“寻址”操作符的语法一样,一个指针被赋值得到“寻址”操作符的返回值。因为“寻址”操作符的返回值就是一个指针,所有事情
都考虑过了,你的代码应该通过编译。对于赋值给一个指针,它必须在内存中得到一个地址,不然编译器将给你提示错误。

 int x; int* px = &x; 
    上面一段代码说明了被声明为int类型的变量x,一个被声明为指针的变量并给赋值内存中x的地址。指针px实际上通过存储在内存中x的地址“指向”x。记住当声明一个指针时,需要同类型的指针在你所在地址中充当变量或常量。
    现在这里你开始明白指针和references的不同了。赋值一个指针给内存中的地址,你不得不使用“寻址”操作符来返回指针变量在内存中的地址。
    而一个references,不管怎样,都不需要使用“寻址”操作符赋值成内存中的地址。赋值一个地址给一个reference,你只需要使用变量充当rvalue值就行。
 int x; int& rx=x; 
    上面代码显示类型int的变量x被声明,然后reference rx也被声明,并且被赋值“充当”x。注意不管x的地址是怎样存储在rx中,或者说通过rx“被参考”,不必使用其他操作符,仅是变量。在你遇到必须声明同类型reference作为变量或常量的情况,你也必须遵循此类方法来充当指针。
    有可能,你想知道一个指针能显示什么内容,就像这样:
#include <iostream.h>int main(){ int someNumber = 12345; int* ptrSomeNumber = &someNumber; cout << "someNumber=" << &someNumber <<endl; cout << "ptrSomeNumber=" << prtSomeNumber <<endl; return 0;} 
    假如你编译并运行此代码,你应该会得到变量someNumber输出12345,ptrSomeNumber将输出一个十六进制数(内存中地址都是以十六进制被实现的。)现在,如果你想输出prtSomeNumber所指的值,你应该使用这些代码:
#include <iostream.h>int main(){ int someNumber = 12345; int* ptrSomeNumber = &someNumber; cout << "someNumber=" << &someNumber <<endl; cout << "ptrSomeNumber points to " << *prtSomeNumber <<endl; return 0;} 
    所以从原理上来说,当你想使用、修改或操作指针x所指的值,你就可以使用*x来充当此值或变量。
    这里有一个指针和referenceds能做的事的速查列表:
  • 你能赋值指针来“指向”内存中的地址。
  • 你能赋值reference来“充当”变量或常量。
  • 你能复制指针值给其他指针。
  • 你能分别修改指针或references所指或充当的,在内存中存储的值。
  • 你能对指针所指地址作递增或递减的操作。
  • 你能传递指针和references给函数(更多信息见“通过reference传递”中可找到)。
......待续。