• C++入门基础01:指针与引用


    C++入门基础:指针与引用

    指针

    #include 
    //系统定义头文件一般是尖括号
    #include
    #include
    using namespace std;
    
    //引用与指针
    //是复合数据类型,与基本数据类型int、double这类是不一样的
    //指针存储的是一个变量或者对象的地址
    
    int main()
    {
       //一、指针:
        //先定义一个普通的数据类型
        int a = 10;
        //定义一个指针
        //1、定义指针指向的数据类型,int*表示指向int类型的一个指针。
        //2、p表示指针的名称。这里p可以赋予nullptr空指针,但是必须要赋值。
        //3、如果想要p指针指向a,那么就将a的地址(&a)付给p指针。
    	int* p = &a;
        //输出来看一下:
        //将*放在指针名的前面,*p表示取得指针所指向的内容,这个过程就叫做解引用。
        cout << "p指向的内容是:" << *p << endl;
        cout << "p的值为:" << p << endl;
    
        //二、空指针
        int* q = nullptr; //空指针不指向任何对象。所以不能取空指针所对应的值,否则会发生错误。
        // cout << "q指向的内容是:" << *q << endl; //这句是有问题的
        cout << "q的值为:" << q << endl;
        
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    在这里插入图片描述
    **使用指针的优点和必要性: **
    1、指针能够有效的表示数据结构,如链表;
    有的时候我们要实现一些复杂的数据结构,比如说链表。
    使用链表是为了保存不连续的数据存储。
    在这里插入图片描述
    2、能动态分配内存,实现内存的自由管理;
    3、便捷高效的使用数组,如C风格字符串使用;
    4、指针传参:值传递不如地址传递高效,因为值传递先从实参的地址中取出值,在赋值给形参带入函数使用;而指针则把形参的地址直接指向实参地址,使用时直接取出数据,效率提高。

    引用

    是在C++中才引入的一种数据类型。在C语言中是没有这个数据类型的。
    引用主要用于引用传参,通过引用传参可以在函数里面修改变量的值,通过这个参数将修改后的结果回传。

    指针和引用的区别
    1、引用必须被初始化(初始值必须是一个对象),指针不必须(但最好要初始化)。
    2、引用初始化以后不能被改变,指针可以改变所指的对象。
    3、不存在指向空值的引用,但是存在指向空值的指针。
    4、指针通过某个指针变量指向一个对象后,对它所指向的变量间接操作。引用本身就是目标变量的别名,对引用的操作就是对目标变量的操作。
    5、指针是一个对象,可以定义指向指针的指针。但引用不是对象,没有实际地址,所以不能定义指向引用的指针,也不能定义指向引用的引用。

    #include 
    //系统定义头文件一般是尖括号
    #include
    #include
    using namespace std;
    
    //引用与指针
    //是复合数据类型,与基本数据类型int、double这类是不一样的
    //指针存储的是一个变量或者对象的地址
    
    int main()
    {
       //一、指针============================
        //先定义一个普通的数据类型
        int a = 10;
        //定义一个指针
        //1、定义指针指向的数据类型,int*表示指向int类型的一个指针。
        //2、p表示指针的名称。这里p可以赋予nullptr空指针,但是必须要赋值。
        //3、如果想要p指针指向a,那么就将a的地址(&a)付给p指针。
    	int* p = &a;
        //输出来看一下:
        //将*放在指针名的前面,*p表示取得指针所指向的内容,这个过程就叫做解引用。
        cout << "p指向的内容是:" << *p << endl;
        cout << "p的值为:" << p << endl;
    
        //二、空指针============================
        int* q = nullptr; //空指针不指向任何对象。所以不能取空指针所对应的值,否则会发生错误。
        //cout << "q指向的内容是:" << *q << endl; //这里会报错,不能取空指针所对应的值。
        cout << "q的值为:" << q << endl;
    
        //三、引用============================
        //是在C++中才引入的一种数据类型。在C语言中是没有这个数据类型的。
        int b = 10;
        //引用定义时,初始化时需要绑定一个对象。如果我们直接定义一个引用不给绑定一个初始化对象,就会报错。
        //因此引用创建时必须初始化,即绑定一个初始化对象。
        int& ref = b;
        // int& ref1; //这里会报错,引用创建时必须初始化。
        cout << "ref:" << ref << endl;
    
        ref++;
        cout << "ref:" << ref << endl;
        //这里我们再查看一下变量b,变量b会随着ref引用的变化而变化,引用是变量b的一个别名,对引用的操作就是对变量本身的操作。
        cout << "b:" << b << endl;
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46

    在这里插入图片描述

    其他内容

    1、#include ,iostream是指iostream库。iostream的意思是输入输出流,直接点说就是in(输入) out(输出) stream(流),取in、out的首字母与stream合成。
    iostream 库的基础是两种命名为 istream 和 ostream 的类型,分别表示输入流和输出流。流是指要从某种 IO 设备上读出或写入的字符序列。术语“流”试图说明字符是随着时间顺序生成或消耗的。

    2、自定义的头文件,自定义的就不可以通过尖括号这种形式了。例如:#include “test.h”。

    3、调用cout这个函数进行内容输出。cout是在std命名空间之下的。这里如果想不加std::,就需要在上方声明std的使用using namespace std,using namespace std这样就限定了在std的这个命名空间中去找函数。std就是标准库。

    4、运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单;调试程序: F5 或调试 >“开始调试”菜单

  • 相关阅读:
    Java开发环境配置
    WeLink协作文档:办公协作再快一档
    1055 The World‘s Richest
    DRM全解析 —— encoder详解(2)
    python 正则的简单用法
    2023 “华为杯” 中国研究生数学建模竞赛(D题)深度剖析|数学建模完整代码+建模过程全解全析
    Win11系统设置闪退的解决方案
    【学习笔记】NOIP模拟赛 - B.游戏
    App Inventor 2 如何比较两个日期/时间?
    bs4获取图片
  • 原文地址:https://blog.csdn.net/m0_37755995/article/details/127935664