c++学习笔记-引用和指针

1.引用和指针上

//引用,就是别名
//指针
#include<iostream>
#include<string>
#include<vector>

using namespace std;

int main()
{
    int a = 1024;
    int &b = a;//b是a的别名
    cout << b << endl;
    cout << a << endl;//输出均为1024
    //定义引用必须初始化,因为引用就是别名
    //引用必须是变量
    int i = 1024, i2 = 2045;
    int &r = i, &ri = i2;
    cout << r << endl;
    cout << ri << endl;
    //上述都是普通引用,就是非const引用
    //下述是const引用

    const int ival = 1024;//常量
    const int &refVal = ival;//const引用必须指向const常量
    //int &ref2=ival会出错


    //const int &r = 42;const 引用可以初始化为一个常量
    double dval = 3.14;
    const int &rall = dval;//const int可以引用为非int,非const就不行,必须指向引用同类型的对象

    cout << dval << endl;
    cout << rall << endl;

    //指针
    string s("hello world");
    string *sp = &s;
    string* ps1,ps2;//ps1是一个指针,ps2不是指针。
    string *ps1, *ps2;

    cout << s << endl;//原值
    cout << sp << endl;//存放变量s的地址,&取地址操作
    cout << *sp << endl;//解引用

    vector<int> *pvec;//指针指向int类型的向量
    int *ip1, *ip2;//ip1是一个变量,这一个变量是一个指针,指针指向的类型int
    double dp, *dp2;

    //有了指针之后,就可以进行赋值
    int ival2 = 1024;
    int *pi = 0;//指针是0表示不指向任何对象
    int *pi2 = &ival2;
    int *pi3;//没有初始化,指针指向一个对象
        pi = pi2;//指向同一个对象
        //避免使用未初始化的指针,c++无法检查是否初始化和是否是无效地址
        int ival2;
        int zero = 0;
        const int c_ival = 0;

        //int *pi4 = ival;//不允许的
        //int *pi4 = c_ival;也是不允许的
         //int *pi=2121;
        int *pi6 = NULL;//NULL就是0

        double nul;
        double *pi7 = &nul;
        double *pi8 = pi7;//pi8是个指针,用来保存地址,pi7也是个指针,保存地址,又把地址放在了pi8里。

        //int *pi7 = pd;//错误 d是double
        //万能指针
        double obj = 3.14;
        int k;
        void *pv = &obj;//指向double
        pv = &k;//指向int,万能指针用处不大

        int a = 1;
        int *pia = &a;

        a = a + 2;
        *pia= *pia + 2;




    system("pause");
    return 0;

}
//c++可以不用指针(迭代器和容器),c语言中特别重要,主要是用来操作数组,字符串主要是字符数租
//指针介绍:指针一般用于低级操作

2.指针下

#include<iostream>
#include<string>

using namespace std;

int main()
{
    int ival = 1, ival2 = 2;

    int *pi;
    int *pi3;//指针在声明的时候可以不进行初始化
    pi = &ival;//通过赋值初始化
    pi3 = &ival2;
    //引用不可以不进行初始化,引用在声明的时候必须进行初始化
    pi = pi3;//指针可以改变指向的对象
    cout << ival << ',' << *pi << endl;
    //引用了一个对象,就不可以再改变,引用只能应用一个对象所以叫别名
    //即引用必须初始化而且不能改变


    int *pi1 = &ival,*pi2 = &ival2;
    int &ri = ival, &ri2 = ival2;

    cout << ival <<','<< ri<<','<<*pi1<<endl;

    //声明一个指针的指针
    int **ppi = &pi;//pi是一个指针,保存地址
    pi2 = *ppi;//使用指针的指针 
    cout << **ppi << endl;

    system("pause");
    return 0;

}//在c++不建议使用数组和指针,低级应用可以使用,c++是做高级应用的避免使用指针
//java严格拒绝使用指针
//缺点:语法复杂

猜你喜欢

转载自blog.csdn.net/weixin_42655231/article/details/82494102