美文网首页
[基础]C++:引用,指针和const

[基础]C++:引用,指针和const

作者: 离群土拨鼠 | 来源:发表于2019-03-17 16:51 被阅读0次

这一节的内容从我大一到现在就没学明白过,希望今天彻底搞懂!!!

引用 &p:就是给对象起了个别名或小名。

  • 引用只能绑定在对象上,而不能与字面值表达式的计算结果绑定在一起。

  • 引用必须初始化,且只能绑定一次。

#include<iostream>
using namespace std;
int main()
{
    int a = 1,d; 
    int &b = a; //正确,b是a的别名
    int &c; //错误,没有初始化
    int &c=d;// 正确绑定在d上
    b = 10;
    cout << a << endl;// b的之变化,a也变化了
    system("pause");
    return 0;
}

指针 *p:想象它是一个低级任意门,只要知道地址就可以到想去的地方。

  • 指针本身就是一个对象,可以赋值和拷贝,可以指向不同的对象。可以不用初始化,如果不初始化就是一个不确定的值。

#include<iostream>
using namespace std;
int main()
{
    int *a, *b;//对,没初始化也没指向对象
    int *p0=12;//错,初始化了,但是没指向对象。
    int a1;
    int *p1 = a1;//错,a1没有赋值
    int b0 = 0;
    int b1 = 10;
    int *p2 = &b1;// 对,p2装着b1的地址,而且初始化了
    int *p3 = p2;//对,没有初始化,但是p2的地址赋值给了p3
    *p3 = 20;//对,*p3的值改成了20
    int *p4;
    p4 = &b0;
    if (p4);//判断p4地址下的值,0为false,其他为ture
    if (p2);//
    p4 = p2;//对p2的地址赋值给了p4

    cout << *p4 << endl;
    system("pause");
    return 0;
}

指向指针的指针 **p:想象它是一个高级任意门,只要知道低级任意门的地址就可以到那个低级任意门的地方。

  • 装着指针的地址

#include<iostream>
using namespace std;
int main()
{
    int a = 10;
    int *p = &a;//指向一个int型
    int **p1 = &p;//指向一个int型指针
    cout << **p1 << endl;
    system("pause");
    return 0;
}

const 限定符:不许动!!!

  • 定义的值不能被改变

  • 必须初始化

  • (1)const 初始化

#include<iostream>
using namespace std;
int main()
{
    const int a = 10;//正确,初始化了
    const int b = get();//正确,运行函数时初始化了
    const int k;//错误,没有初始化
    int c = 10;
    const int c1 = c;//正确,将c的值赋给了c1
    int d = c1;//正确,将c1的值赋给了d
    system("pause");
    return 0;
}
  • (2)const 引用

#include<iostream>
using namespace std;
int main()
{
    const int a = 10;//正确,初始化了
    const int &b = a;//正确
    b = 0;//错误,常量不能改变值
    int &c = a;//错误,非常量不能引用常量
    int c = 10;
    const int &c1 = c;//正确,引用一个非常量
    c1 =0;//错误,c1的值不能改变
    c = 0;//正确,
    system("pause");
    return 0;
}
  • (3)const 指针

  • 有顶层const和底层const之分。

#include<iostream>
using namespace std;
int main()
{
    int a = 0;
    int *const p = &a;//正确,顶层,一直指向a
    const int b = 10;
    const int c = 30;
    const int *p2 = &b;//正确,底层,
    p2 = &c;//正确,可以改变p2
    *p2 = 20;//错误,不能改变值
    if (*p);//
    *p = 10;//正确,可以改变*p的值
    system("pause");
    return 0;
}

总结:我还是晕晕的。。。。。

参考:C++primer 第五版

相关文章

  • [基础]C++:引用,指针和const

    这一节的内容从我大一到现在就没学明白过,希望今天彻底搞懂!!! 引用 &p:就是给对象起了个别名或小名。 引用只能...

  • 《kotlin实战》阅读笔记(1)

    变量 分为 可变的引用(var) 不可变的引用(val) 可变和不可变类似于c++ 中 const 对于指针的限定...

  • 学习目录

    基础 1、cin、cout、namespace 2、引用 & (别名) 指针的引用 3、const 4、函数 5、...

  • 绿盟面试准备

    C++基础知识 指针和引用的区别: 指针是一个变量 ,引用是别名.指针可以初始化为空, 引用必须初始化为具体的值....

  • c++ 指针和引用的区别

    1. 指针有const,引用没有const 1)为了限制指针更改指向,引入了const指针(int* const ...

  • C++学习笔记(与安卓平台无关)

    C++语法 const指针 template定义 定义函数时参数类型的选择 函数参数可以传值,传引用或者传指针,如...

  • C++基础

    C++ 值传递、指针传递、引用传递详解C++中引用传递与指针传递区别 引用传递和指针传递的区别 引用的规则:(1)...

  • C++中容易被忽略的基础知识

    const和define的区别C++中static关键字的总结C++中的构造函数及深拷贝浅拷贝c++基础之引用和指...

  • const理解

    关于const *和* const的理解,可以参考[C C++ OC指针常量和常量指针区别]这篇文章。 该篇文章中...

  • 11、引用

    1、引用必须在定义的时候就初始化。指针不需要。 2、const引用必须引用const常量(文本和const修饰的变...

网友评论

      本文标题:[基础]C++:引用,指针和const

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