C++指针:解锁内存操作的钥匙

引言

指针是C++中的一种特殊变量,用来存储另一个变量的内存地址。简单来说,指针并不直接存储数据本身,而是存储数据所在的地址。通过指针,我们可以直接访问和操作内存中的数据。指针在C++中至关重要,因为它们提供了对内存的直接控制,这使得程序可以更加高效和灵活。

什么是指针

指针的定义:存储内存地址的变量。实例代码如下

#include <iostream>

int main() {
    int num = 42;           // 定义一个整数变量num,值为42
    int* ptr = &num       // 定义一个指针变量ptr,并将num的地址赋给它

    std::cout << "num的值: " << num << std::endl;            // 输出num的值
    std::cout << "ptr存储的地址: " << ptr << std::endl;      // 输出指针ptr存储的地址(即num的地址)
    std::cout << "ptr指向的值: " << *ptr << std::endl;       // 解引用ptr,输出它指向的变量的值

    return 0;
}

输出信息如下

num的值: 42
ptr存储的地址: 0x7ffee614c3c4  // 具体地址可能不同
ptr指向的值: 42

对上述代码的解释如下

  1. int num = 42; 这一行创建了一个名为num的整数变量,并将其值设置为42。
  2. int* ptr = &num 这一行创建了一个指向整数的指针ptr,并将num的内存地址赋值给它。&num操作符用于获取num的内存地址。
  3. std::cout << *ptr; 这一行使用解引用操作符*,通过指针ptr访问并输出num的值。

通过这个例子我们可以看到指针是如何存储地址的,并且是如何通过解引用来访问该地址存储的值。

指针的基本操作

指针可以简单的类比为浏览器中的里的书签。

浏览器代表内存中的数据,包含了许多信息(变量)。

书签是指针,它标记了某个具体页面的位置(内存地址)。

1.声明指针

就像你要新建一个书签,你得分类,告诉书签它收藏什么类型的信息。比如你可以这样:

int *ptr;

声明了一个int*类型的指针变量ptr。这就相当于你新建了书签放在了int类型文件夹:“嘿,你专门负责保存'int'类型的网页。

2.指向某个地址

书签得具体对应一个地址,要不然只能保存空白页面了。你得告诉它具体的网址:

int a = 10;
ptr = &a;

在变量前面加上&即为取该变量的地址,这里指针ptr就指向了变量a的地址。这里的'&a'就是具体的网址,相当于你给书签正式收藏了。

3.取值操作

书签存储的网页信息,当我想要浏览的时候,点击书签,“给我弹出你保存的信息吧,我要浏览了”。

int value = *ptr;

这里对一个指针变量前加上*就是解引用操作,能够将去指针变量指向的那块地址获取数据,这里value就获取了ptr指向的a的地址上保存的数据10。

4.修改指向的值

如果你觉得这个书签保存的页面不太对,你可以将其更新。

*ptr = 20;

这里就将ptr指向的a的地址上保存的数据由10变成了20。

5.修改指向

有时候如果书签保存的网页更新了,你需要修改一下指向,改成更新后的页面地址

int b = 60;
ptr = &b;

这里就更改了指针变量ptr的指向,如果此时输出*ptr的话,会输出ptr指向b地址上存放的数据60。

6.空指针

有些书签可能还没想好具体指向哪个页面,可以设置为空指针

ptr = nullptr;

当然个别页面可能已经失效 了,这时候就是悬空指针,地址已经被释放了,那就指向了非法地址。但大多数时候都是非常可靠的,只要你指挥得当,他就能高效地完成任务!

总结

本文我们具体介绍了一下指针的定义:存储内存地址的变量。其实完全可以将指针看做你的书签,目的就是存储具体页面的地址。有了这个地址我们可以直接访问和操作内存中的数据。这个意义是重大的,指针允许我们在运行时动态分配和释放内存,这在处理大量数据或需要灵活内存管理的场景中特别有用。允许程序员直接操作内存和硬件资源,避免了不必要的拷贝和数据移动。一些非线性的数据结构,如树,图,链表,就是利用指针这一关键变量来完成的。

好了,各位感谢大家读到了这里,希望本篇文章对您有所帮助,如果您感觉读了本篇对C++的理解又提升了,请给我点个赞吧,这对我真的很重要。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值