美文网首页
技术分享 | C语言指针从入门到放肆

技术分享 | C语言指针从入门到放肆

作者: 阿木实验室 | 来源:发表于2021-12-30 09:20 被阅读0次
    file
    一、前言
    相信很多学习C/C++编程都会“谈指针色变”。对于指针,是一种“指针虐我千百遍,我待指针如初恋”。因为一不小心,就会造成内存泄露,核心存储错误等BUG。今天本文就带大家走进指针。

    二、什么是指针
    指针(point),全称指针变量,简称为指针,是C/C++一个类型,其本质是一个变量,一个用来存放内存地址的变量。是一个复合类型。

    ** 三、为什么使用指针**
    对于一个计算机程序,在存储数据的时候,需要考虑以下三个属性。

    1.信息存储在什么地方(内存地址)?
    2.存储的值是多少?
    3.存储的是什么类型的信息?
    为了解决上述的问题,就诞生了指针。

    四、指针的基本用法
    1.指针的声明、初始化以及赋值
    C++是一个强类型语言并且严格区分初始化和赋值的概念。对于指针变量来说。声明指针的时候,必须要初始化,如果没有要指向的对象,可以指向nullptr。如下所示:
    int x = 10; //初始化一个整形变量x
    int* ptr = &x; //初始化指针变量,并且指向x
    int* ptr2 = nullptr; //初始化指针变量,并且指向nullptr
    从上面的代码可以看出,& 为取地址符号,目的是为了给指针变量赋值,int* 表示ptr为指针,且为一个int类型的指针。

    2.指针的解引用
    如果一个指针变量指向了一个对象,那么可以用解引用符号 * 来访问该对象存储的值。例如:

    include <iostream>

    int main() {
    int x = 10;
    int* ptr = &x;
    std::cout << "*ptr = " << ptr << std::endl;
    }
    上述代码将会输出
    ptr的值为10。

    3.指针的加减
    指针作为一个变量,可以对其进行加减操作,需要注意的是,指针的加减,移动的是地址的长度。例如:一个int类型的指针,如果我们对其进行+1操作,那么它将会移动4个字节。如下所示:

    include <iostream>

    int main() {
    int x = 10;
    int* ptr = &x;
    std::cout << "ptr = " << ptr << std::endl;
    std::cout << "ptr + 1 = " << ptr + 1 << std::endl;
    }
    上述代码将会输出以下内容
    ptr = 0x7ffd38e3b11c
    ptr + 1 = 0x7ffd38e3b120
    注意,并不是每一次运行结果都一样。

    五、常量指针与指针常量
    关于指针变量,请牢牢把握两个点:一个是指针变量指向的地址,而是指针变量指向地址中所保存的数据。

    所谓指针指向的地址,只需要记住这一点,指针变量是用来保存变量地址的,而且是只能保存地址。所谓指针变量指向地址中保存的数据,即指向对象的值(注意是对象的值,而不是指针变量的值)
    记住上面这两个,接下来将进入指针中相对比较重要的部分了

    1.const int* ptr
    const int* ptr表示指针变量ptr指向的地址中保存的数据不能改变,即变量的值不能改变,相当于 const int x =3;即 ptr不能改变。但是指针变量ptr指向的地址可改变。如代码第4行所示。
    int x = 3;
    int y = 4;
    const int
    ptr = &x;
    ptr = &y; //允许,可以指向不同的地址,但是不能修改地址中的值
    *ptr = 5; //不允许,限定 ptr,保护地址中的数据
    故,const int
    ptr 限制的指针的第二点,即限制指针变量指向地址中保存的数据,不能改变。

    2.int* const ptr
    int* const ptr 表示指针变量ptr指向的地址不能改变,即ptr的值不能改变,在下面这个例子中,指针变量只能指向x,不能指向y。但是指针变量指向地址中保存的数据可以改变,即ptr可以改变,如代码第4行所示。
    int x = 3;
    int y = 4;
    int
    const ptr = &x;
    ptr = 5; //允许,可以修改指针变量ptr指向地址中保存的数据
    ptr = &y; //不允许,限定指针变量ptr指向的地址。
    故,int
    const ptr限制的是指针的第一点,即指针变量指向的地址不能改变。

    ** 六、结语**
    学习 C++ 的指针既简单又有趣。通过指针,可以简化一些 C++ 编程任务的执行,还有一些任务,如动态内存分配,没有指针是无法执行的。所以,想要成为一名优秀的 C++ 程序员,学习指针是很有必要的。
    阿木实验室致力于为机器人研发提供开源软硬件工具和课程服务,让研发更高效!

    相关文章

      网友评论

          本文标题:技术分享 | C语言指针从入门到放肆

          本文链接:https://www.haomeiwen.com/subject/cxkiqrtx.html