打印
[牛人杂谈]

认识指针

[复制链接]
570|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
稳稳の幸福|  楼主 | 2017-4-26 22:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 稳稳の幸福 于 2017-4-27 20:14 编辑

C程序的内存使用形式
内存方式
作用域
生命周期
全局内存
整个文件
应用程序生命周期
静态内存
声明函数内部
应用程序生命周期
自动内存
声明函数内部
函数执行生命周期
动态内存
由引用该内存的指针决定
内存释放(人工)
全局内存:常见的全局变量 静态内存:静态变量,例如const int var 自动内存:常见的就是生命在函数体内的变量了,这是最常见的 动态内存:通过指针创建的堆区域
常量与指针[td]
指针类型
指针是否可修改
指针指向数据是否可修改
指向非常量的 指针( int * ptr )
指向 常量的 指针( const int * ptr )
指向非常量的常量指针( int * const ptr )
指向 常量的常量指针( const int * const ptr )
阅读指针声明的时候,采取从右往左读的方式。
* pci - pci是个指针
int * pci - pci是个指向整数的指针
const int * pci - pci是个指向整数常量的指针,(指针可变,指针指向区域的整型数据不可变)
  • int const * p与const int * p是等价的。可以按上面那种方式来读取。const * p是指向常量的指针,int const * p是指向整型常量的指针。
  • int * const p是与上面不同的,const p意味着是常量,* const p则是常量指针,int * const p是指向整型的常量指针(指针不可变,指针指向区域的整型数据可变)
  • 结合上面两种的形式是const int * const * p就是指针不可变,指针指向区域的数据也不可变

指针多层引用
  • 多层指针通常与多维数组,指针数组等有关联,详细的放到第四章 数组与指针中进行详细记录

其他
  • 指针的语法和语义规范
  • 指针的声明:声明指针时,例如int * p,*的位置是无所谓的,看个人习惯。
  • &用来取值,%p来显示地址。
  • 各平台显示地址方式不一定会一致。通过将要显示的指针转换为void指针来兼容各个平台,例如print("p%",(void *) p)
  • 通过程序显示的地址均为在操作系统虚拟内存映射下的地址,并非真正的物理地址
  • 在取地址和解地址的方面,*和&是互反的操作
  • 在使用指针时,NULL和0都可以,但是NULL更好些,可以告诉开发者在使用指针。
  • void指针是通用指针。void指针可以转换为除函数指针外的任何指针。
  • intprt_t和uintptr_t是C99标准为了适应64位环境所新增的。暂时可以不用了解
  • 指针相加的实质是按声明类型字节大小进行步增
  • 指针相减的实质是两个指针地址相减后,按声明类型字节大小整除后得到的单位值,并通过符号老判断地址前后顺序


沙发
xixi2017| | 2017-4-27 20:27 | 只看该作者
看明白了,谁跟指针名距离近谁就是修饰指针名的。

使用特权

评论回复
板凳
huangcunxiake| | 2017-4-27 21:37 | 只看该作者
星号的位置很重要

使用特权

评论回复
地板
huangcunxiake| | 2017-4-27 21:38 | 只看该作者
星号后面的组合起来看,然后星号说明后面的组合是指针,星号前面内容为指针指向空间的变量特性。

使用特权

评论回复
5
huangcunxiake| | 2017-4-27 21:39 | 只看该作者
星号后面的组合起来看,然后星号说明后面的组合是指针,星号前面内容为指针指向空间存储的元素特性。这里不能说变量了,不好意思。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

162

主题

3098

帖子

8

粉丝