热门标签 | HotTags
当前位置:  开发笔记 > IOS > 正文

讲解C++编程中Address-of运算符&的作用及用法

这篇文章主要介绍了C++编程中Address-of运算符&的作用及用法,是C++入门学习中的基础知识,需要的朋友可以参考下

语法

& cast-expression

备注
一元 address-of 运算符 (&) 采用其操作数的地址。address-of 运算符的操作数可以是函数指示符,也可以是指定不是位域且不使用 register 储存类说明符声明的对象的左值。
address-of 运算符仅适用于具有基本、结构、类或在文件范围级别声明的联合类型的变量,或仅适用于下标数组引用。在这些表达式中,可在 address-of 表达式中添加或提取不包括 address-of 运算符的常数表达式。
当应用于函数或左值时,该表达式的结果将是派生自操作数类型(右值)的指针类型。例如,如果操作数的类型为 char,则表达式的结果为指向 char 的类型指针。address-of 运算符(应用于 const 或 volatile 对象)的计算结果为 const type * 或 volatile type *,其中 type 是原始对象的类型。
在将 address-of 运算符应用于限定名时,结果将取决于 qualified-name 是否指定静态成员。如果是这样,则结果为指向成员声明中指定的类型的指针。如果该成员不是静态的,则结果为指向由 qualified-class-name 指示的类的成员 name 的指针。
以下代码段说明了结果的不同之处,取决于该成员是否为静态的:

// expre_Address_Of_Operator.cpp
// C2440 expected
class PTM {
public:
      int  iValue;
  static float fValue;
};

int main() {
  int  PTM::*piValue = &PTM::iValue; // OK: non-static
  float PTM::*pfValue = &PTM::fValue; // C2440 error: static
  float *spfValue   = &PTM::fValue; // OK
}

在此示例中,由于 fValue 是静态成员,因此表达式 &PTM::fValue 产生类型 float * 而不是类型 float PTM::*。
仅当明确要引用的函数的版本时,才能采用重载函数的地址。有关如何获取特定重载函数的地址的信息,请参阅重载函数的地址。
通过将 address-of 运算符应用于引用类型,可获得与将该运算符应用于引用绑定到的对象所获得的结果相同的结果。例如:

// expre_Address_Of_Operator2.cpp
// compile with: /EHsc
#include 
using namespace std;
int main() {
  double d;    // Define an object of type double.
  double& rd = d; // Define a reference to the object.

  // Obtain and compare their addresses
  if( &d == &rd )
   cout <<"&d equals &rd" <

Output

&d equals &rd

以下示例使用 address-of 运算符将指针参数传递给函数:

// expre_Address_Of_Operator3.cpp
// compile with: /EHsc
// Demonstrate address-of operator &

#include 
using namespace std;

// Function argument is pointer to type int
int square( int *n ) {
  return (*n) * (*n);
}

int main() {
  int mynum = 5;
  cout <

Output

25


推荐阅读
  • 本文旨在提供一套高效的面试方法,帮助企业在短时间内找到合适的产品经理。虽然观点较为直接,但其方法已被实践证明有效,尤其适用于初创公司和新项目的需求。 ... [详细]
  • 阿里宝卡用户能否在UC浏览器极速版中享受免流量服务?
    本文详细介绍了UC浏览器极速版是否支持阿里宝卡的免流量功能,以及如何正确设置以确保免流量服务的正常使用。 ... [详细]
  • 如何清除Chrome浏览器地址栏的特定历史记录
    在使用Chrome浏览器时,你可能会发现地址栏保存了大量浏览记录。有时你可能希望删除某些特定的历史记录而不影响其他数据。本文将详细介绍如何单独删除地址栏中的特定记录以及批量清除所有历史记录的方法。 ... [详细]
  • 本文详细介绍了优化DB2数据库性能的多种方法,涵盖统计信息更新、缓冲池调整、日志缓冲区配置、应用程序堆大小设置、排序堆参数调整、代理程序管理、锁机制优化、活动应用程序限制、页清除程序配置、I/O服务器数量设定以及编入组提交数调整等方面。通过这些技术手段,可以显著提升数据库的运行效率和响应速度。 ... [详细]
  • 利用Selenium与ChromeDriver实现豆瓣网页全屏截图
    本文介绍了一种使用Selenium和ChromeDriver结合Python代码,轻松实现对豆瓣网站进行完整页面截图的方法。该方法不仅简单易行,而且解决了新版Selenium不再支持PhantomJS的问题。 ... [详细]
  • 本题来自WC2014,题目编号为BZOJ3435、洛谷P3920和UOJ55。该问题描述了一棵不断生长的带权树及其节点上小精灵之间的友谊关系,要求实时计算每次新增节点后树上所有可能的朋友对数。 ... [详细]
  • Ulysses Mac v29:革新文本编辑与写作体验
    探索Ulysses Mac v29,这款先进的纯文本编辑器为Mac用户带来了全新的写作和编辑环境。它不仅具备简洁直观的界面,还融合了Markdown等标记语言的最佳特性,支持多种格式导出,并提供强大的组织和同步功能。 ... [详细]
  • 国际高保真音乐流媒体平台的崛起:亚马逊与谷歌的竞争策略
    近期,亚马逊和谷歌正积极筹备推出高保真音乐流媒体服务,预计在2019年底前上线。根据市场研究机构CIRP的数据,截至2018年12月,美国智能音箱的安装量已增至6600万台,较第三季度增长显著。这一趋势对Spotify等传统流媒体平台构成了新的挑战。 ... [详细]
  • 本文介绍了如何使用JavaScript的Fetch API与Express服务器进行交互,涵盖了GET、POST、PUT和DELETE请求的实现,并展示了如何处理JSON响应。 ... [详细]
  • Nature Microbiology: 人类肠道古菌基因组目录
    本研究揭示了人类肠道微生物群落中古细菌的多样性,分析了来自24个国家、农村和城市人群的1,167个非冗余古细菌基因组。研究鉴定了多个新分类群,并探讨了古菌对宿主的适应性及其与社会人口特征的关系。 ... [详细]
  • 本文介绍如何利用栈数据结构在C++中判断字符串中的括号是否匹配。通过顺序栈和链栈两种方式实现,并详细解释了算法的核心思想和具体实现步骤。 ... [详细]
  • 探索新一代API文档工具,告别Swagger的繁琐
    对于后端开发者而言,编写和维护API文档既繁琐又不可或缺。本文将介绍一款全新的API文档工具,帮助团队更高效地协作,简化API文档生成流程。 ... [详细]
  • 本文详细介绍了Grand Central Dispatch (GCD) 的核心概念和使用方法,探讨了任务队列、同步与异步执行以及常见的死锁问题。通过具体示例和代码片段,帮助开发者更好地理解和应用GCD进行多线程开发。 ... [详细]
  • 本文探讨了在构建应用程序时,如何对不同类型的数据进行结构化设计。主要分为三类:全局配置、用户个人设置和用户关系链。每种类型的数据都有其独特的用途和应用场景,合理规划这些数据结构有助于提升用户体验和系统的可维护性。 ... [详细]
  • 本文介绍如何从字符串中移除大写、小写、特殊、数字和非数字字符,并提供了多种编程语言的实现示例。 ... [详细]
author-avatar
Du-kodak
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有