zoukankan      html  css  js  c++  java
  • 03-指针

    指针的定义

    • 地址
      • 内存单元的编号(是一个从0开始的非负整数)
      • 地址值的范围:0~2^地址总线数 - 1
    • 指针
      • 数据类型:地址,存储地址这种类型的变量
      • 保存对象地址的变量,指针是一种"地址变量"。通常也叫"指针变量",统称"指针"
      • 指针变量就是存放内存单元编号的变量,或者说指针变量就是存放地址的变量
      • 本质:一个操作受限的非负整数

    指针的重要性

    • 表示一些复杂的数据结构
    • 快速的传递数据
    • 使函数返回一个以上的值
    • 能直接访问硬件
    • 能够方便的处理字符串
    • 理解面向对象语言中引用的基础

    Demo

    简单使用

    互换两个数


    如何通过被调函数修改主调函数普通变量的值?

    1. 传递给形参的必须为该实参的地址
    2. 形参必须为指针变量
    3. 在被调函数中通过 *形参名 的方式就可以修改主调函数相关变量的值

    * 的含义

    • 乘法
    • 定义[指针变量]
      • 实例:int* p;
      • 定义一个名字叫 p 的变量,其存放的内容必须是 int 类型变量的地址
    • 指针运算符
      • 实例:*p
      • 放在已经完成初始化操作的指针变量前面,等价于以 p 的内容为地址的变量

    指针和数组

    • 指针和一维数组
      • 数组名
        • 就是一个地址 / 一个符号常量 / 一个地址常量
        • 数组名也属于符号常量。数组名这个符号,就代表了数组占的那块内存的首地址
        • 不是数组名这个符号的值是那块内存的首地址!而是数组名这个符号本身就代表了首地址这个地址值!它就是这个地址!
        • 不是一个变量,更不是一个作为变量的指针
    • 下标和指针的关系:pArr[i] 等价于 *(pArr+i)
    • 在一个函数内部修改 main 函数内定义的数组
      • 需要 2 个参数
        • 数组第一个元素的地址(数组名这个符号就代表了数组所占那块内存的首地址)
        • 数组的长度
      • 代码演示
    • 指针变量的运算
      • 指针变量不能相加、相乘、相除
      • 如果两个指针变量指向的是同一块连续空间中的不同存储单元,那么这两个指针变量相减有意义,其结果为两个指针指向元素之间相隔的元素数目

    一个指针变量的大小

    sizeof (数据类型 | 变量名):返回值就是该 [数据类型 | 变量] 所占的字节数

    • p 指向 char / int / double 类型变量,其所占的字节数是否一样?是一样的
    • p 只保存"所指向变量的首字节地址",但其本身却占用 4 个字节,为什么?以 32 位机为例,共有 2^32 个地址,而表达其中的某一个地址就需要 32 位 Bit,即 4 个字节
    • p 只保存了变量首字节的地址,那它如何获悉整个变量到底占用了多少字节?根据指针变量的数据类型。如 int* p = &i; 如此便知道了从首地址往后 sizeof(int) 个字节 都是 [p所指向变量] 所占用的内存空间
    • 小结
      • 一个指针变量无论所指向变量占几个字节,其本身只占 4 个字节
      • 一个变量的地址是使用该变量首字节的地址来表示

    多级指针

    • *r 是以 r 的内容为地址的变量,即 q
    • **r 是以 *r(q) 的内容为地址的变量,即 p
    • ***r 是以 **r(p) 的内容为地址的变量,即 i
  • 相关阅读:
    Java调度实现
    关于《报表》的实际运用案例
    mybaits错误解决:There is no getter for property named 'parentId ' in class 'java.lang.String'
    Java Eclipse进行断点调试
    切割时间工具类
    JavaWeb开发技术基础概念回顾篇
    解决无线网络连接出现黄色感叹号---win10
    登录界面Demo
    MD5加密Demo
    java.lang.NullPointerException&com.cb.action.LoginAction.execute(LoginAction.java:48)
  • 原文地址:https://www.cnblogs.com/liujiaqi1101/p/13613122.html
Copyright © 2011-2022 走看看