zoukankan      html  css  js  c++  java
  • c++ 指针(一)

     指针:是说指针名表示的是地址。是一个变量,存储的是值的地址,而不是值本身

     *运算符被称为间接值或解除引用运算符也可以叫做取地址符

     声明一个指针

     int * p_data;

     * p_data的类型为int 由于*运算符被用于指针,因此p_data变量本身必须是指针。

     我们说p_data指向int类型,我们还说P_data的类型是指向int的指针,或int*

    可以这样说p_data是指针(地 址),而*p_data是int,而不是指针

    初始化指针

    int value=1;

    int * pt=&value;

    &的作用就是取变量的地址

    初始化指针就是把pt的值设置为&value,

    输出

    cout<<"value"<<value<<endl;

    cout<<"*pt"<<*pt<<endl;

    cout<<"&value"<<&value<<endl;

    cout<<"pt"<<pt<<endl;

    你就会发现pt和&value是一样的

    *pt和value 是一样的

    一般如果只是声明一个指针,可以把指针初始化等于0的指针指针为nullptr不指向任何对象

    int* myValue(nullptr);

    nullptr可以隐式转换为bool类型

    可以这么判断

    if(!myValue)

      ........

    -----------------------------------------------------------------------------------

    用new 来分配内存,程序员要告诉new 需要为哪种数据类型分配内存,new 将找到一个长度正确

    的内存块,并返回该内存的地址。

    int *pt =new int;

    new int 告诉程序,需要适合存储Int的内存。new运算符根据类型来确定需要多少字节的内存。

    然后找到这样的内存并返回地址,再把地址赋值给pt,pt被声明为指向int的指针

    现在pt是地址,*pt是指向该内存的值

    使用完内存后我们就要把内存归还给内存池,这就用到了delete

    使用delete时要加上指向内存块的指针

    int * pt=new int;

    delete pt;

    一定要配对的使用new 和delete,也不能释放已经释放完的内存块

    也不能向下面这样释放声明变量所得的内存

    int value=1;

    int * pt=&value;

    delete pt;//这样做是不对的

    下面说一下指针创建数组

    int * pt =new int[10];

    new 运算符返回的是第一个元素的地址,用完后我们要用delete释放它们

    delete [] pt;//[] 告诉程序应释放整个数组,而不是仅仅是指针指向的元素

    使用new 和delete时,应遵守以下规则

    1.不要用delete 来释放不是new分配的内存

    2.不用使用delete来释放同一个内存块两次

    3.如果使用new[] 为数组分配内存,则应使用delete[]释放

    4.如果用new为一个实体分配内存,则应使用delete(没有[])来释放

    5.对于空指针应用delete是安全的

    创建数组后我们就可以用指针访问这些数组了

    int * pt =new int[3]

    pt[0] =1;

    pt[1] =2;

    pt[2] =3;

     使用指针符号可以处理数组中的数据,相应的执行速度往往比使用数组符号要快

  • 相关阅读:
    hdu 5045 Contest
    hdu 4068 SanguoSHA
    TSP 旅行商问题(状态压缩dp)
    haoi2015 树上操作
    noi 2015 软件包管理器(树链剖分)
    zjoi2008 树链剖分
    读入优化
    动态规划类型总结
    有关Rujia Liu 动态规划的·一些总结
    输入优化
  • 原文地址:https://www.cnblogs.com/li-peng/p/3465745.html
Copyright © 2011-2022 走看看