zoukankan      html  css  js  c++  java
  • 指针

    用于存储值得地址。指针名表示的是地址。*运算符称为间接值或接触引用运算符,得到该地址处存储的值。

    一般来说地址需要几个字节取决于计算机系统。

    声明与初始化

    1 int *ptr;//c风格
    2 int* ptr;//c++风格,强调*ptr是一个int类型的值

    *两边的空格是可选的。

    c++中,int*是一种复合类型,是指向int的指针。


    声明中初始化

    1 int higgens == 5;
    2 int* ptr = &higgens;

    一定要在对指针应用解除引用运算符*之前,将指针初始化为一个确定的,适当的地址。


    强制类型转换为指针

    要将数字值作为地址来使用,通过强制类型转换将数字转换为适当的地址类型:

    1 int* ptr;
    2 ptr = (int*) 0xB8000000;

    使用new来分配内存

    typename * pointer_name = new typename

    告诉new需要为哪种数据类型分配内存,new将找到正确内存块,返回该内存块的地址。

    c++中值为0的指针,被称为空指针 Null pointer。


    使用delete释放内存

    当需要内存是,使用new请求。使用完内存后,使用delete将其归还给内存池。

    int* ptr = new int;
    ......
    delete ptr;//释放ptr指向的内存,不删除指针ptr本身

    只能用delete来释放使用new分配的内存,对空指针使用delete是合法的。


    指针和数组

    • 静态联编:编译时给数组分配内存;
    • 动态联编:使用new,运行阶段需要时创建,不需要时不创建。

    使用new创建动态数组:

    int* psome = new int [10];//必须在类型后加上括号,表示元素数目
    
    //new返回第一个元素的地址

    当程序使用完new分配的内存时,使用delete来释放:

    delete [] psome;
    
    //方括号告诉程序,释放整个数组
    
    //如果使用new不带方括号,使用delete也不带,两者要匹配。

    指针当做数组名即:

    *psome指向第一个元素的值,也可以是psome[0]

    psome是数组第一个元素的地址,psome+1后就到了第二个元素的地址,这里增加的量就等于它指向的类型的字节。


    如果给cout提供一个字符的地址,它将从该字符开始打印,知道遇到空字符为止。

    用引号括起来的字符串像数组名一样,也是第一个元素的地址。

  • 相关阅读:
    前端安全-XSS攻击
    leetcode-0003 无重复字符的最长子串
    leetcode-0002 两数相加
    leetcode-0001 两数之和
    数据结构篇-数组(TypeScript版+Java版)
    前端性能优化(一)-- 文件的压缩与合并
    《深入浅出RxJS》读书笔记
    python工具函数
    [其他]Ubuntu安装genymotion后unable to load VirtualBox engine
    [linux]CentOS无法使用epel源
  • 原文地址:https://www.cnblogs.com/pacino12134/p/10973965.html
Copyright © 2011-2022 走看看