C++变量,指针,引用详解

本文介绍了C++中的变量、指针和引用的概念。变量是存储空间的命名,指针是一个对象,持有内存地址,而引用是变量的别名,它们都允许对内存空间进行操作。在示例中展示了如何声明、使用及解引用这些概念,并探讨了它们在内存占用和地址方面的差异。
摘要由CSDN通过智能技术生成

变量,指针,引用

变量

变量给一段可供程序操作的存储空间起了个名字,通过这个名字我们可以使用这个存储空间,使用变量就是使用内存空间,所以我们在声明变量时必须指定数据类型(指定这个存储空间为多大),但是可以不指定具体的数据内容,后面再填充进去也可以,因为我们可以通过这个变量随时操作这段存储空间

int main() {
	int a = 1;
	cout << &a << endl;
	cout << sizeof(a) << endl;
}

输出结果为:

0000009F54EFF544
4

通过对a使用&符号,可以获取这段存储空间(这段存储空间别名是a)的地址,对a进行sizeof(即对这段内存空间进行sizeof),可以获取这段内存空间的大小为四个字节(int为四字节)。

指针

  1. 和变量一样,通过指针可以对一段存储空间进行访问
  2. 指针本身就是一个对象,即它本身就占据一段存储空间,而不是像变量一样,只是一段存储空间的名字
  3. 指针可以像变量一样进行声明,同样在声明时可以不赋初始值,可以后面再让这个指针指向一段内存空间地址。
int main() {
	int a = 1;
	cout << "数据本身的地址:" << &a << endl;
	cout << "数据本身的内存大小:" << sizeof(a) << endl;

	int* point_a = &a;
	cout << "指针本身的数据:" << point_a << endl;
	cout << "指针本身的地址:" << &point_a << endl;
	cout << "指针本身的内存大小:" << sizeof(point_a) << endl;

	cout << "指针指向的数据:" << *point_a << endl;
	cout << "指针指向的数据的地址:" << &(*point_a) << endl;
	cout << "指针指向的数据的内存大小:" << sizeof(*point_a) << endl;
}

输出结果为:

数据本身的地址:000000393C11FC44
数据本身的内存大小:4
指针本身的数据:000000393C11FC44
指针本身的地址:000000393C11FC68
指针本身的内存大小:8
指针指向的数据:1
指针指向的数据的地址:000000393C11FC44
指针指向的数据的内存大小:4

从上面代码可以看到,指针本身就占据了内存,指针本身也有数据,数据内容就是指向的存储空间的地址,那么指针本身自然也有对应的内存地址。再64位编译模式下指针本身占据内存是8字节,32位模式下占据4字节,上面代码是再64位编译模式下编译的。

通过*可以对指针进行解引用,*加指针名称(*point_a)就相当于一个变量,可以直接使用它查看数据,对它使用&查看地址为多少,对它使用sizeof查看内存大小为多少。

引用

指针只是一段存储空间的别名,就像使用变量名那样,我们完全可以按照同样的方式使用一个引用。

int main() {
	int a = 1;
	cout << "数据本身的地址:" << &a << endl;
	cout << "数据本身的内存大小:" << sizeof(a) << endl;

	int* point_a = &a;
	cout << "指针本身的数据:" << point_a << endl;
	cout << "指针本身的地址:" << &point_a << endl;
	cout << "指针本身的内存大小:" << sizeof(point_a) << endl;

	cout << "指针指向的数据:" << *point_a << endl;
	cout << "指针指向的数据的地址:" << &(*point_a) << endl;
	cout << "指针指向的数据的内存大小:" << sizeof(*point_a) << endl;

	int& ref_a = a;
	cout << "引用本身的数据:" << ref_a << endl;
	cout << "引用本身的地址:" << &ref_a << endl;
	cout << "引用本身的内存大小:" << sizeof(ref_a) << endl;
}

输出结果为:

数据本身的地址:00000001000FFA04
数据本身的内存大小:4
指针本身的数据:00000001000FFA04
指针本身的地址:00000001000FFA28
指针本身的内存大小:8
指针指向的数据:1
指针指向的数据的地址:00000001000FFA04
指针指向的数据的内存大小:4
引用本身的数据:1
引用本身的地址:00000001000FFA04
引用本身的内存大小:4

从输出结果看到,我们使用引用和使用变量的效果是完全一样的,不管是直接使用ref_a,还是对ref_a使用&,还是对ref_a使用sizeof,都没有区别。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

种树家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值