C++指针(二)

摘要:
取消引用指针以访问它所引用的对象。*运算符将获得它所引用对象:string(“helloworld”);字符串*sp=&当helloworld解引用sp时,它将获得s.1的值。解引用操作生成一个lv。解引用运算符返回指定对象的lv。使用此函数,可以修改指针指向的对象的值。因此,给*sp赋值也会修改s的值。您也可以修改指针sp本身的值。

  指针提供间接操作其所指对象的功能。与对迭代器进行解引用操作一样,对指针进行解引用可访问它所指的对象,*操作符将获取指针所指的对象:

    string s("hello world");

    string *sp = &s;    

    cout<<*sp;             //结果为:hello world

  对sp进行解引用将获得s的值,然后用输出操作符输出该值,于是最后一条语句输出了s的内容hello world。

  1.生成左值的解引用操作

  解引用操作符返回指定对象的左值,利用这个功能可修改指针所指对象的值:

    *sp = "goodbye";               

  因为sp指向s,所以给*sp赋值也就修改了s的值。

  也可以修改指针sp本身的值,使sp指向另外一个新对象:

  string s2 = "some value";

  sp = &s2;

  给指针直接复制即可修改指针的值——不需要对指针进行解引用。

  2.指针和引用的比较

  虽然使用引用和指针都可间接访问另一个值,但它们之间有两个重要区别。第一个区别在于引用总是指向某个对象:定义引用时没有初始化是错误的。第二个重要区别则是赋值行为的差异:给引用赋值修改的是该引用所关联的对象的值,而并不是是引用与另一个对象关联。引用已经初始化,就始终指向同一个特定对象。思考下面两个程序段。第一个程序段将一个指针赋给另一指针:

  int ival = 100, ival2 = 200;

  int *pi = &ival, *pi2 = &ival2;

  pi = pi2;

  执行代码,查看pi所指向的ival对象值保持不变,赋值操作修改了pi指针的值,使其指向另一个不同的对象。现在考虑另一段相似的代码

  int &ri = ival, &ival2 = ival2;

  ri = ri2;

  这个复制操作修改了ri引用的值ival对象,而并非引用本身。赋值后,这两个引用还是分别指向原来关联的对象,此时这两个对象的值相等。

免责声明:文章转载自《C++指针(二)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇SQL Server 的版本CODING 与悬镜安全达成战略合作,引领 DevOps 向 DevSecOps 创新模式升级下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Ajax取PHP JSON数据并显示

<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-sc...

2019中国大学生程序设计竞赛(CCPC)

目录 Contest Info Solutions A - & B - array C - K-th occurrence D - path E - huntian oy F - Shuffle Card G - Windows Of CCPC H - Fishing Master Contest Info [Practice Li...

纹理映射 【转】

9.4 纹理对象 使用纹理对象来存储纹理数据的步骤: 1) 生成纹理对象名称 2) 将纹理对象绑定到纹理数据(包括图像数据数组和纹理属性), 即创建纹理对象. 3) 如果OpenGL实现高性能纹理工作集, 应检查是否有足够的空间来存储所有的纹理对象. 如没有足够空间, 应设置每个纹理对象的优先级, 以确保最常用的纹理留在工作集中 4) 绑定和重新绑定纹理对...

AndroidManifest.xml文件详解(meta-data)

http://blog.csdn.net/think_soft/article/details/7567189 语法(SYNTAX): <meta-dataandroid:name="string"           android:resource="resource specification"           android:value...

C#堆和栈

堆和栈是两种可以分配的内存。 栈保存代码的运行路径。堆保存对象。 栈好比整齐摆放的盒子。堆则好比杂乱无章的盒子。 在堆中我们可以轻易找到需要的对象,而由于默认访问最顶端的栈,当栈中的方法执行完毕之后就会丢弃,然后继续查找最顶端的盒子,直到发现合适的。 借用其他博主的图片。左边是栈,右边是堆。 栈是内存自主维护的。而堆则需要垃圾回收机制 堆和栈主要存放了四...

数据可视化之powerBI技巧(十三)PowerBI作图技巧:动态坐标轴

之前的文章中介绍了如何制作动态的分析指标,这篇进行文章再介绍一下如何制作动态的坐标轴。   假设要分析的数据为销售额,分别从产品和地区两个维度进行分析,要实现的效果是,如果选择的是产品,则坐标轴是各个产品的名称,对应的是各个产品的销售额;如果选择的是地区,则坐标轴为城市,展现的是各个城市的销售额。   要达到这样的效果,我们首先需要把城市名称和产品名称整合...