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

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

指针

#include <iostream>
//系统定义头文件一般是尖括号
#include<fstream>
#include<string>
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、便捷高效的使用数组,如C风格字符串使用;
4、指针传参:值传递不如地址传递高效,因为值传递先从实参的地址中取出值,在赋值给形参带入函数使用;而指针则把形参的地址直接指向实参地址,使用时直接取出数据,效率提高。

引用

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

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

#include <iostream>
//系统定义头文件一般是尖括号
#include<fstream>
#include<string>
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、#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 或调试 >“开始调试”菜单

猜你喜欢

转载自blog.csdn.net/m0_37755995/article/details/127935664