zoukankan      html  css  js  c++  java
  • c++

    指针 int *x;尽量理解为int 类型

    1、指针声明之后,必须初始化,否则会随机指针

    2、如果指针不知道指向谁,那么应该把这个指针变为空指针,

    应用情况:在堆内存使用完之后要手动删除

    空指针命名方法: int *p ==nullotr;

    栈内存的东西不用delete,只针对new关键字hi用,栈会自动回收,不用delete操心

     

    &:引用    (改东西的时候考虑使用)

    常量:

    常量是不允许指针去修改数据的,可以修改指针的指向

    const 是欺骗指针的,让指针以为这份数据是一份常量数据

    所以 禁止  指针来修改这个数据的值

    常量指针命名方法: int * const xx=$

    指向 常量数据  const int * const xx=$

    常量指针 能通过指针修改数据,但不能修改指针指向。

    常量指针指向常量:

    const int * const xx=&age;

    不能修改指向位置的数据

    不能修改指针的指向

     

    指针和 const 谁在前先读谁 ;

    *象征着地址,const象征着内容;

    谁在前面谁就不允许改变。

     

    函数传递指针 :

    c++ 里面函数的参数,大部分情况都是 使用指针来传递

    c++ 函数传值方式有三种  值传递 引用传递 和指针传递 。实际上 这三种的背后都是拷贝的工作,

    值传递:拷贝的都是数据,值传递 :拷贝的是数据,引用传递和指针传递 都是拷贝的数据地址

     

    函数返回指针:

    1不要返回局部变量的地址,因为后面可能拿不到值

    2当然也要有概率会取到值,那是因为栈内存还没来得及回收数据,sleep 休眠一下就能体现出来

    3 就算能拿到值,也不提倡这种写法

    tips : 返回局部变量的地址,局部变量存放在栈内存,所以i返回了栈内存的一个地址。

    担心取不到值,因为函数执行结束,这个变量的数据会被干掉。

    最后要手动回收内存,先delete x;x=nummptr;

     函数指针:

     

    降低代码的耦合度,提高自由度,再SDK开发里面就比较有用。

    函数指针:把一个函数A传递给B,然后再函数B里面执行函数A

    函数指针有没有存在的必要性?能不能不用函数指针,如果一定要用那么在什么场合用?

    1 可以不用函数指针,但是这样的代码耦合度很高,黏在一起了、

    2 当我们有一个函数内部想要调用另一个函数,此时就用到了函数指针 

    引用:

    1引用实际上就是原有数据的别名称呼

    2 引用声明的时候,必须立即初始化,否则报错

    3 引用并不会开辟新的空间,对引用和原数据取地址得到是一样的。

    4 不能创建数组的引用,因为数组是一堆数据,引用只是表示一个 个体的别名

    左值和 右值 :

    1 c++ 里面的赋值表达式,有左值和右值之分

    2  为什么区分左值和右值,因为函数的参数主要有左值,主要有右值】

    c++ 里面可以针对右值进行移动的操作(类的移动构造函数)

    3 左值可以出现在等号的左边也可以出现在右边,右值只能出现再等号的右边。

    4为了区分左值和右值 就看他能否取到地址,能取地址就是左值,不能取地址就是右值

    &age :能取地址

    5 左值一般是一些变量、对象,因为他会开辟空间,右值其实就是说这个空间里面的数据  实实在在的数据,

    比如: 数值,计算表达式,函数的返回值。

     左值引用

    1.左值引用其实就是以前讲过的引用,使用一个&来表示

    2.左值引用只能接收左值,默认不能接收右值

    3.但是如果左值引用加上const修饰,那么左值引用就可以接收右值了

    右值引用

    1.右值引用使用&&表示,左值引用使用&表示

    2.左值引用能接收左值,如果要接收左值,必须加上const关键字修饰

    3右值引用 就只能收右值,禁止接收左值。

    tips : 在调用别人函数的时候,就要小心一些,因为函数的参数经常会出现左引用和右引用。

    函数的参数 真的有必要写成引用吗?

    1.如果不想修改外部的数据,不写也可以。

    2.引用还有一个好处就是不会开辟新的空间 来存放一份拷贝的数据

    3.所以c++的源码,大部分都是引用或者指针,没有写成普通的变量写法。

    int add01(int a,int b)

    更多的情况是下面这种:

    int add01(int &a,int &b)

    int add01 (int * a,int *b)

     

    还有一点就是关于右值引用的是在c++版本11开始到以后才有的 (value_type &&__x)

    在11 版本之前都是(const value_type &__x)   : 左值引用

  • 相关阅读:
    vim常用命令集(摘自鸟哥私房菜)
    LINUX下把多行文件合并成一行,并组装成SQL
    UVA 10148 Advertisement (贪心 + 区间选点问题)
    linux环境应用程序LOG日志打印(C语言)
    SharePoint 2013 Nintex Workflow 工作流帮助(三)
    SharePoint 2013 Nintex Workflow 工作流帮助(二)
    SharePoint 2013 Nintex Workflow 工作流帮助(一)
    SharePoint表单和工作流
    SharePoint表单和工作流
    SharePoint表单和工作流
  • 原文地址:https://www.cnblogs.com/wy919/p/12785757.html
Copyright © 2011-2022 走看看