首页 经验文章正文

指针的引用,程序员的快乐源泉

经验 2024年11月09日 13:00 86 香野

各位小伙伴们,大家好!今天我们要聊一聊编程中的一个小怪兽——指针的引用,没错,就是那个让无数程序员头秃的存在,但是别担心,我今天要用一种轻松愉快的方式带大家了解它,保证让你笑中带学,学中带笑!

什么是指针?

我们来了解一下什么是指针,指针,顾名思义,就是一个指向内存地址的小箭头,想象一下,你手里拿着一张地图,上面标着一个宝藏的位置,这张地图就是指针,而宝藏的位置就是内存地址,指针就是一个变量,它的值是另一个变量的内存地址。

int a = 10; // 定义一个整数变量a,值为10
int *p = &a; // 定义一个指针p,让它指向a的地址

在这段代码中,&a 表示变量a 的地址,*p 则表示指针p 指向的内存地址中的值。*p 等于10

什么是引用?

我们来看看引用,引用其实就是一个别名,就像你在朋友圈里的昵称一样,引用的本质是给一个变量起一个别名,但这个别名和原来的变量共享同一个内存地址,换句话说,通过引用修改变量的值,就相当于直接修改了原变量的值。

```c++

int a = 10; // 定义一个整数变量a,值为10

int &ref = a; // 定义一个引用ref,让它指向a

在这段代码中,ref 就是a 的别名,你可以通过ref 来修改a 的值:
```c++
ref = 20; // 通过引用修改a的值
cout << a << endl; // 输出20

指针与引用的区别

好了,现在我们已经了解了指针和引用的基本概念,那么它们之间有什么区别呢?让我们用一种幽默的方式来解释一下:

1、指针可以为空,引用不能

- 指针就像你手里的遥控器,你可以选择不指向任何东西(即NULL)。

- 引用就像你的名字,你必须有一个名字,不能没有。

2、指针可以重新赋值,引用不能

指针的引用,程序员的快乐源泉

- 指针就像你手中的指南针,你可以随时改变方向。

- 引用就像你的身份证号,一旦确定就不能更改。

3、指针占用额外的内存,引用不占用

- 指针就像你家里的钥匙,需要一个地方放。

- 引用就像你的影子,不需要额外的空间。

4、指针可以有多个指针指向同一个地址,引用只能有一个

- 指针就像你家里的多把钥匙,可以有多个人拥有。

- 引用就像你的指纹,每个人只有一个。

指针的引用

我们来聊聊今天的主角——指针的引用,指针的引用,其实就是给指针起一个别名,听起来是不是很简单?但实际上,它在某些情况下非常有用。

```c++

int a = 10; // 定义一个整数变量a,值为10

int *p = &a; // 定义一个指针p,让它指向a

int *&ref = p; // 定义一个指针的引用ref,让它指向p

在这段代码中,refp 的别名,你可以通过ref 来修改p 的值,也可以通过ref 来访问p 指向的内存地址中的值。
```c++
ref = nullptr; // 通过引用将p设置为nullptr
cout << (p == nullptr) << endl; // 输出1,表示p确实是nullptr
*ref = 20; // 通过引用修改p指向的值
cout << a << endl; // 输出20

指针的引用的应用场景

1、函数参数传递

- 在某些情况下,你可能希望函数能够修改传入的指针,使用指针的引用可以实现这一点,而且更安全。

```c++

void resetPointer(int *&ptr) {

ptr = nullptr;

}

int main() {

int a = 10;

int *p = &a;

resetPointer(p);

cout << (p == nullptr) << endl; // 输出1

return 0;

}

2、链表操作:
   - 在链表中,你可能需要修改节点的指针,使用指针的引用可以简化代码,避免复杂的指针操作。
   ```c++
   struct Node {
       int value;
       Node *next;
   };
   void insertAfter(Node *&prev, int value) {
       Node *newNode = new Node{value, prev->next};
       prev->next = newNode;
   }
   int main() {
       Node *head = new Node{1, nullptr};
       Node *second = new Node{2, nullptr};
       head->next = second;
       insertAfter(head, 1.5);
       // 遍历链表
       for (Node *curr = head; curr != nullptr; curr = curr->next) {
           cout << curr->value << " ";
       }
       // 输出: 1 1.5 2
       return 0;
   }

好了,今天的科普就到这里啦!指针的引用虽然看起来有些复杂,但其实掌握了基本概念后,你会发现它在很多场景下都非常有用,希望这篇文章能让你在学习编程的过程中少走一些弯路,多一些乐趣,如果你觉得有趣,别忘了给我点个赞哦!

如果你还有其他编程方面的问题,欢迎随时来找我聊天,我是你的搞笑科普作家,我们下次见!

艾普斯常识网 网站地图 免责声明:本网站部分内容由用户自行上传,若侵犯了您的权益,请联系我们处理,谢谢!联系QQ:2760375052 备案号:沪ICP备2023024865号-34旺佯网络