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

本文深入解析C++中的引用和指针概念,对比两者特性,阐述引用作为别名的不可更改性,以及指针的灵活性和潜在风险。通过实例演示如何使用指针和引用,包括基本操作、指针的指针等高级用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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严格拒绝使用指针
//缺点:语法复杂
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值