int main() {
int rats = 101;
int &rodents = rats;
int *p_rats = &rodents;
cout << "rats = " << rats << endl;
cout << "rodents = " << rodents << endl;
cout << "*p_rats = " << *p_rats << endl;
cout << "p_rats = " << p_rats << endl;
cout << "&rodents = " << &rodents << endl;
cout << "********************************" << endl;
cout << "rats = address =" << &rats << endl;
cout << "rodents = address =" << &rodents << endl;
cout << "p_rats = address =" << &p_rats << endl;
}
rats = 101
rodents = 101
*p_rats = 101
p_rats = 0x16d5f7518
&rodents = 0x16d5f7518
********************************
rats = address =0x16d5f7518
rodents = address =0x16d5f7518
p_rats = address =0x16d5f7508
变量详解
1. int rats = 101;
- 类型:
int
- 含义: 这是一个普通的整型变量,值为
101
。 - 内存中: 它占用一块内存空间,存储的是整数值
101
。
2. int &rodents = rats;
- 类型:
int&
(引用) - 含义:
rodents
是rats
的一个别名(alias)。- 它不是另一个变量,而是
rats
的“另一个名字”。 - 对
rodents
的任何操作都会影响到rats
,因为它们是同一个东西!
⚠️ 引用必须在声明时初始化,且不能更改指向。
3. int *p_rats = &rodents;
- 类型:
int*
(指向整型的指针) - 含义:
p_rats
是一个指针变量,它保存的是rodents
的地址。- 因为
rodents
是rats
的别名,所以&rodents
实际上就是&rats
。 - 所以
p_rats
指向的是rats
这个变量。
✅ 输出结果解释(假设内存地址为示例)
表达式 | 含义 | 示例输出(可能不同) |
---|---|---|
rats | 整数变量的值 | 101 |
rodents | rats 的别名,值相同 | 101 |
*p_rats | 解引用指针,访问 p_rats 指向的内容 | 101 |
p_rats | 指针本身的值,即 rats 的地址 | 0x7ffee4b55a3c (示例地址) |
&rodents | rodents 的地址,等价于 &rats | 0x7ffee4b55a3c |
📌 关键点总结
表达式 | 类型 | 含义 |
---|---|---|
rats | int | 一个整型变量,值为 101 |
rodents | int& | rats 的别名,修改它等于修改 rats |
p_rats | int* | 指针,指向 rodents ,也就是指向 rats |
*p_rats | int | 通过指针访问 rats 的值 |
&rodents | int* | rodents 的地址,和 &rats 相同 |
💡 形象比喻
你可以把这理解成:
rats
是一个人的名字。rodents
是他的小名,别人喊他小名也等于叫他。p_rats
是一张写着这个人地址的纸条,拿着这张纸条可以找到他。
✅ 总结一句话:
rats
是原始变量,rodents
是它的别名(引用),p_rats
是指向这个变量的指针。三者最终都指向同一块内存中的值101
。
如果你还想深入了解引用与指针的区别、引用作为函数参数的作用、空指针、野指针等内容,欢迎继续提问!我可以一步步带你深入 C++ 的世界 😎
代码模式