- 指针的基本概念
- 变量的直接访问和间接访问
- 指针与指针变量
- 指向变量的指针变量
- 指针变量的定义
- 指向关系的建立
- 间接访问
- 指针变量做函数形参
- 指向函数的指针和返回指针值的函数
- 指向函数的指针
- 指向函数的指针变量
- 指向函数的指针变量做函数参数
- 返回指针值的函数
- 多级指针
- 二级指针
- 多级指针
指针的基本概念 变量的直接访问和间接访问
直接按照变量地址访问变量的方式称为“直接访问”。
把变量地址存放在一个特殊变量中,然后通过访问特殊变量的值(地址),再由此值(地址)找到最终要访问的目标变量的方法称为“间接访问”。
通过地址能找到所需的内存单元,地址“指向”存储单元。
变量的地址称为变量的指针。
专门用来存放其它变量地址的特殊变量称为指针变量。
指向变量的指针变量
指针变量的定义
一般形式:
类型说明符 *指针变量名;
其中“类型说明符”表示指针变量所指向数据的类型,又称为指针变量的基类型。
“ * ”为指针变量的定义符,表示定义的是一个指针变量。
“指针变量名”由用户指定,遵循标识符命名规则。
指针变量名本身并不包含“ * ”,“ * ”仅仅说明其后的标识符是一个指针变量,定义多个指针变量时每个指针变量前都应该有一个“ * ”。
指针变量定义以后其值是一个随机值(动态指针)或者是0(静态指针)。
可以在定义指针变量的同时进行初始化建立指向关系,也可以在定义之后确定指针变量的指向关系。
- 将变量的地址初始化赋给指针变量。
- 可以用初始化了的指针变量给另一个指针变量做初始值。
- 可以将一个指针变量初始化为一个零指针。
- 指针变量中只能存放地址(指针),不要将一个非零的常量赋值给某一指针变量。
- 指针变量中只能存放与其指向类型相同的变量的地址,即指针变量只能指向和其基类型相同的变量。
“*”称为间接访问运算符,是前缀单目运算符。
运算符“*”的 *** 作对象必须是指针。
表达式“*指针”表示指针所指向的变量。
不要混淆间接访问运算符“ * ”和指针变量定义中的指针定义符“ * ”。
函数的形参还可以是指针变量,函数调用时实参应该是变量的地址或指向变量的指针变量。
发生函数调用时实参向形参的传递遵循单向值传递规则,传递的内容是实参表示的地址值。
这种传递的实质是将实参的指针值传递给形参指针变量,使得实参指针和形参指针变量指向了主调函数中的同一个变量。
尽管在函数调用中不能改变实参指针的值,但可以在被调函数中通过改变形参指针变量所指向的变量来改变实参指针所指向变量的值,因为实参指针和形参指针变量指向的是同一个变量。
因此,指针变量做函数形参为被调函数改变主调函数中的数据提供了手段,增加了函数之间信息传递的渠道,并且克服了函数通过return 语句只能返回一个数据的局限性。
函数名也称为函数的指针。
引入函数指针的概念后,就可以使函数的入口地址像一般数据一样进行复制、存储,使得借助函数名调用函数与通过函数指针调用函数具有等价性。
- 指向函数的指针变量的定义
一般形式:
类型说明符 (*指针变量名)(形参的类型表列);
- 用指向函数的指针变量调用函数
一般形式:
指针变量名(实参表列)
或:
(*指针变量名)(实参表列)
指向函数的指针变量做函数参数
C语言程序中,函数指针的作用主要体现在函数之间传递函数。
当函数在两个函数间传递时,被调函数的形参应该是能接收函数地址的指向函数的指针变量,函数调用时的实参应该是被传递函数的函数名或指向该函数的函数指针变量,即将某个函数的入口地址赋值给对应的形参指针变量,使其指向指定的函数,实现函数(入口地址)的传递。
定义二级指针的一般形式:
类型说明符 **指针变量名;
多级指针
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)