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
  • 相关阅读:
    CSS3—— 2D转换 3D转换 过渡 动画
    CSS3——边框 圆角 背景 渐变 文本效果
    CSS3——表单 计数器 网页布局 应用实例
    CSS3——提示工具 图片廓 图像透明 图像拼接技术 媒体类型 属性选择器
    CSS3——对齐 组合选择符 伪类 伪元素 导航栏 下拉菜单
    CSS3——分组和嵌套 尺寸 display显示 position定位 overflow float浮动
    CSS3——盒子模型 border(边框) 轮廓(outline)属性 margin外边距 padding填充
    Eclipse连接数据库报错Local variable passwd defined in an enclosing scope must be final or effectively final
    数据库——单表查询
    数据库——添加,修改,删除
  • 原文地址:https://www.cnblogs.com/liujiaqi1101/p/13613122.html
Copyright © 2011-2022 走看看