数组存储与指针学习笔记(三)指针与数组

嵌入式C语言学习进阶系列文章

GUN C编译器拓展语法学习笔记(一)GNU C特殊语法部分详解
GUN C编译器拓展语法学习笔记(二)属性声明
GUN C编译器拓展语法学习笔记(三)内联函数、内建函数与可变参数宏
数组存储与指针学习笔记(一)数据类型与存储、数据对齐、数据移植、typedef
数组存储与指针学习笔记(二)枚举类型、常量与变量



一、指针

1.1 指针的本质

  内存一般可分为静态内存和动态内存,一个程序被加载到内存运行时,代码段和数据段就属于静态内存,而堆栈则属于动态内存。

  • 静态内存的特点是内存中各个变量的地址在编译期间就确定了,在程序运行期间不再改变。
  • 动态内存中变量的地址在程序运行期间是不固定的,如函数的局部变量,如果这个函数多次被调用运行,那么每次运行都要在栈上随机分配一个栈帧空间;
      指针的原始初衷用途,其实就是访问一片匿名的动态内存。通过指针我们可以直接读写指定的内存。通变量一般采用直接寻址,既可当左值,又可当右值;而指针变量一般采用间接寻址。当指针变量通过间接寻址时,其又等价为一个普通变量(下面代码中的*p与a是等价的),既可当左值,又可当右值。

1.2 复杂指针声明

  声明一个指针,其实就是声明一个指针的类型。指针类型一般可以分为三大类。

  • 函数指针:void(*fp)(int,int)。
  • 对象指针:char*、int*、long*、struct xx*。
  • void指针:一般作为通用指针,作为函数的参数。
      函数指针,顾名思义,指针指向一个函数,指针变量存储的是函数的入口地址。当指针指向不同类型的数据时,我们称这种指针为对象指针。void
    指针既不属于对象指针,也不属于函数指针。

  和指针相关的运算符主要包括以下几种。

  • 指针声明:int*
  • 取址运算符:&
  • 间接访问运算符:*
  • 自增自减运算符:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值