C++中的取地址符(&)
这个符号特别容易混淆, 因为在C++中, &
有两种不同用法:
- 获得变量地址
- 引用传递
第一个例子,
int main()
{
std::string s = "Hello";
std::string*p = &s;
std::cout << p << std::endl;
std::cout << *p << std::endl;
return 0;
}
0x7ffd05129510
Hello
[Finished in 0.2s]
例子中, 变量p
使用*
声明为指针, 将变量s
的地址通过&
符号赋值给p
.
int main()
{
std::string s = "Hello";
std::string &r = s;
std::cout << s << std::endl;
std::cout << r << std::endl;
r = "New Hello";
std::cout << s << std::endl;
std::cout << r << std::endl;
std::cout << &s << std::endl;
std::cout << &r << std::endl;
std::cout << (&s == &r) << std::endl;
return 0;
}
Hello
Hello
New Hello
New Hello
0x7ffc844cc660
0x7ffc844cc660
1
[Finished in 0.2s]
例子中, 变量r
是变量s
的reference, 在内存空间中指代相同的位置.
&
可以用于函数变量引用声明,
void foo(std::string& str)
{
str[0] = 'a';
std::cout << str << std::endl;
}
int main()
{
std::string s = "Hello";
foo(s);
return 0;
}
在这个例子中, 变量str
在函数foo
中是变量s
的 reference, 所有对str
的操作, 相当于对s
的操作.
C++中的取地址符(&)的更多相关文章
- php的foreach中使用取地址符,注意释放
先来举个例子: <?php $array = array(1, 2, 3); foreach ($array as &$value) {} // unset($value); forea ...
- 大一C语言学习笔记(7)---指针篇--什么是指针?什么是指针变量?取地址符“&”的作用是什么?地址运算符“*”的作用是什么,怎么理解两者?
"指针是C语言的灵魂"这句话一开始我没怎么明白,现在接触了指针,终于知道为什么这么说了,因为....难,真难:下面说一下我对这句话的见解: C语言拥有着其他语言所没有的特性---直 ...
- C语言中指针和取地址符&的关系
一 概念定义: 严格说起来,应该这么讲:指针存的是地址,而&运算符是取变量的地址. 指针原理: 其实计算机中的内存就像一个个抽屉(一兆内存就相当于1百万个抽屉),每个抽屉都有一个编号,用于存放 ...
- 取地址符:&
例子: <?php $a=10; $b = &$a; echo $b; $b=15; echo $a; //结果:10和15 //当$b = &$a 时,a,b的地址相同,对a, ...
- C-基础:数组名与取地址符&
指出下面代码的输出,并解释为什么.(不错,对地址掌握的深入挖潜) main() { ]={,,,,}; ); printf(),*(ptr-)); } 输出:2,5 *(a+1)就是a[1], ...
- Delphi中使用@取函数地址的问题(转)
Delphi中使用@取函数地址的问题 例如以下代码:unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes ...
- 详解C++中指针(*)、取地址(&)、解引用(*)与引用(&)的区别 (完整代码)
一.初步了解--指针与取地址 先看程序: #include<cstdio> int main(void) { int num = 7; int *p = # printf( ...
- [转载]C++中 引用&与取地址&的区别
一个是用来传值的 一个是用来获取首地址的 &(引用)==>出现在变量声明语句中位于变量左边时,表示声明的是引用. 例如: int &rf; // 声明一个int型的引用r ...
- 如何使用JAVA语言抓取某个网页中的邮箱地址
现实生活中咱们常常在浏览网页时看到自己需要的信息,但由于信息过于庞大而又不能逐个保存下来. 接下来,咱们就以获取邮箱地址为例,使用java语言抓取网页中的邮箱地址 实现思路如下: 1.使用Java.n ...
随机推荐
- java:Spring框架2(bean的作用域,静态工厂和实例工厂,自动装配,动态代理)
1.bean的作用域,静态工厂和实例工厂: bean.xml: <?xml version="1.0" encoding="UTF-8"?> < ...
- NFA转换为等价的DFA
在编译系统中,词法分析阶段是整个编译系统的基础.对于单词的识别,有限自动机FA是一种十分有效的工具.有限自动机由其映射f是否为单值而分为确定的有限自动机DFA和非确定的有限自动机NFA.在非确定的有限 ...
- javase程序设计上机作业1
package javaxgp.teacher.test; import java.math.BigInteger; import java.util.Scanner; import java.uti ...
- cf1151e number of components
很常见的思想:将整体求改为统计每个部分的贡献 本题中统计[l, r]时, 每个连通块有一个重要特征, 最右端的数在[l,r]中而下一个数不在(好像是句废话 那么我们分别考虑每个点对连通块的贡献, 即它 ...
- 【VS开发】【智能语音处理】Windows下麦克风语音采集
简介 这是我很早以前的大学毕业设计,忽然间找到贴出来以纪念自己的纯真年代...但是因为CSDN不给面子所以导致短短的一篇文章贴了足足7次..他老提时说文章超过了64K,老大,拜托,那是算上了里面的图片 ...
- 交换机安全学习笔记 第五章 DHCP缺陷攻击
关于DHCP攻击有如下几类攻击方式: 一.耗尽DHCP地址池 通过随机生成源MAC地址,然后伪造DHCPDISCOVER数据包.耗尽DHCP服务器地址池. 免费的攻击工具: Yersi ...
- MySQL出现 Access denied for user 'root'@'localhost' (using password:YES) 解决办法
1.先停止MySQL服务,然后在MySQL安装目录(我的是C:\Program Files (x86)\MySQL\MySQL Server 5.1)找到my.ini文件,在最后一行添加skip-gr ...
- spark 运行报错:java.lang.AbstractMethodError
报错日志如下: Caused by: java.lang.AbstractMethodError: sparkCore.JavaWordCount$2.call(Ljava/lang/Object;) ...
- laravel修改用户模块的密码验证
做项目的时候,用户认证几乎是必不可少的,如果我们的项目由于一些原因不得不使用 users 之外的用户表进行认证,那么就需要多做一点工作来完成这个功能. 现在假设我们只需要修改登录用户的表,表名和表结构 ...
- Python 入门之 内置模块 -- random模块
Python 入门之 内置模块 -- random模块 1.random模块 import random # random -- 随机数 (1)选择1-50之间随机的整数 print(random.r ...