《C和指针》第6章-指针学习笔记

  • 内存中的每个位置由一个独一无二的地址标识,内存中的每个位置都包含一个值
  • 高级语言通过名字而不是地址来访问内存的位置,名字与内存位置之间的关联并不是硬件所提供的,它是由编译器为我们实现的,硬件仍然通过地址访问内存位置
  • 指针存储的是其指向的地址,通过间接访问操作符*才能得到其指向地址中的内容
int a = 112,b = -1;
float c = 3.14;
int *d = &a;
float *e = &c;
表达式右值类型
a112int
b-1int
c3.14float
d100int*
e108float*
*d112int
*e3.14float
  • 在你对指针进行间接访问之前,必须非常小心,确保它们已被初始化!
    如果变量是静态的,它会被初始化为0;但如果变量是自动的,它根本不会被初始化。
    标准定义了NULL指针,它作为一个特殊的指针变量,表示不指向任何东西。对一个NULL指针进行解引用操作是非法的。
    如果你已经知道指针被初始化为什么地址,就把它初始化为该地址,否则就把它初始化为NULL。
    风格良好的程序会在指针解引用之前对它进行检查,这种初始化策略可以节省大量的调试时间。
  • 指针的指针
int a = 12;
int *b = &a;
int **c = &b;
表达式相当的表达式
a12
b&a
*ba,12
c&b
*cb,&a
**c*b,a,12
  • 间接访问操作符*是少数几个其结果为左值的操作符之一。
  • 当一个指针和一个整数量执行算术运算时,整数在执行加法运算前始终会根据合适的大小进行调整,这个”合适的大小“就是指针所指向类型的大小。
  • 指针运算只有作用于数组中其结果才是可以预测的。
  • 如果两个指针都指向同一个数组的元素,那么它们之间可以相减
  • 声明一个指针变量并不会自动分配任何内存。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值