C++之&和*
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C++之&和*,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2072字,纯文字阅读大概需要3分钟。
内容图文
![C++之&和*](/upload/InfoBanner/zyjiaocheng/814/9fd2033662524ef3bead3217bd2b416e.jpg)
C++ 之 & 和 *
1.基本概念与二者区别
指针是一块内存的地址值,而引用是一块内存的别名。
从概念上讲。指针从本质上讲就是存放变量地址的一个变量,在逻辑上是独立的,它可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变。
而引用是一个别名,它在逻辑上不是独立的,它的存在具有依附性,所以引用必须在一开始就被初始化,而且其引用的对象在其整个生命周期中是不能被改变的(自始至终只能依附于同一个变量)。
引用:https://www.cnblogs.com/jiu0821/p/4127382.html
下面附上一段代码以便理解抽象的概念:
#include<iostream>
#include<string>
using namespace std;
int main()
{
int a = 5, b = 10, c = 15;
int *p1; //指针可以不初始化
int &d = b; //引用必须初始化(相当于给一个人起外号要针对那个人)
p1 = &a; //p1指向a的地址
cout << "a:" << a << endl << "a的地址:" << &a << endl ;
cout << "b:" << b << endl << "b的地址:" << &b << endl;
cout << "c:" << c << endl << "c的地址:" << &c << endl;
cout << "p1(的地址):" << p1 << endl << "p1所指对象:" << *p1 << endl;
cout << "d:" << d << endl << "d的地址:" << &d << endl;
d = c; //相当于b=d=c;
p1 = &c; //p1指向c的地址
cout << endl <<"修改后:" << endl<<endl;
cout << "a:" << a << endl << "a的地址:" << &a << endl;
cout << "b:" << b << endl << "b的地址:" << &b << endl;
cout << "c:" << c << endl << "c的地址:" << &c << endl;
cout << "p1:" << p1 << endl << "p1所指对象:" << *p1 << endl;
cout << "d:" << d << endl << "d的地址:" << &d << endl;
system("pause");
return 0;
}
从图中我们可以看出:
d=c并不改变d的地址,且d与b地址相同,
所以引用不能重新绑定并非意味不能 重新赋值,重新赋值只代表引用初始化时所绑定对象重新赋值
而指针p1则在指向a的地址后可重新指向c的地址,p1所指对象也随之改变。
2.定义时等号左右的不同含义
例如
int i=4;
int *p=&i;
左侧的*可看做与int一起组成的复合类型 int *,代表指向实数类型的指针
而右侧的&则为取地址符,p指向i的地址。
除了在定义语句中,一般情况下
int a = 5, b = 10;
int *p;
p = &a;
p = &b; //p指向b(取b的地址)
*p = 2; //*p相对于b,即b=2
3.复合类型的判断
注意:只有对指针的引用,没有指向引用的指针!(因为引用本身不是对象)
一句话原则:从右向左读,越靠近变量的符号越说明其本质
eg:int *&r=p;
&说明r的类型是引用,*说明 这个引用 是对指针的引用。
内容总结
以上是互联网集市为您收集整理的C++之&和*全部内容,希望文章能够帮你解决C++之&和*所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。