原创
嵌入式微控制器C语言学习笔记8-《C程序设计语言(第2版)》第5章(第一部分)
指针是一种保存变量地址的变量。指针与数组之间的关系十分密切。使用指针通常生成更高效、更紧凑的代码,但指针也是一把双刃剑,使用不慎会使程序产生意想不到的错误。
&运算符称为取址运算符,可以用于取内存中对象(变量或数组)的地址,它不能作用于表达式、常量或register类型的变量。
*运算符称为间接寻址或间接引用运算符。它作用域指针时,访问指针所指向的对象。
指针只能指向某种特定类型的对象,即每个指针都必须指向某种特定的数据类型。例外的是指向void类型的指针可以存放任何类型的指针,但它不能间接引用其自身。
指针参数使得被调用函数能够访问和修改主调函数中对象的值。
数组下标所能完成的任何操作都可以通过指针来实现。指针编写的程序比数组下标编写的程序执行速度快,不过理解起来稍微困难一些。
数组名所代表的就是该数组最开始的一个元素的地址。对数组元素a的引用也可以写成*(a+i)的形式。&a和(a+i)的含义相同。一个通过数组和下标实现的表达式可等价地通过指针和偏移量实现。
数组名和指针之间有一个不同之处:指针是一个变量,而数组名不是变量。
把数组名传递给一个函数时,实际传送的是该数组第一个元素的地址。数组名参数是一个指针,也就是一个存储地址值的变量。将数组名传递给函数,函数可以根据情况判定是按照数组处理还是按照指针处理。
指针可以初始化,有意义的初始化只能是0或者是表示地址的表达式。
所有的指针运算都会自动考虑它所指向的对象的长度。
有效的指针运算包括:相同类型指针之间的赋值运算;指针同整数之间的加法或减法运算;指向相同数组中元素的两个指针的减法或比较运算;将指针赋值为0或指针与0之间的比较运算。其它所有形式的指针运算都是非法的。
文章评论(0条评论)
登录后参与讨论