C语言指针
1.由于两个函数的作用域不同,因而它们的局部变量互不可见,要想让一个函数能够访问另一个函数里的变量,只能使用指针的间接的访问。
2.程序运行时申请的内存空间只有地址,没有名称,因此指针成为访问动态内存的唯一工具,指针直接访问内存的形式简化了许多复杂的数据结构的表示。
3.纯指针:void *p; 表明指针变量与地址有关,但不明确存储在此地址上的对象类型,有时称这样的指针为"纯指针"
纯指针仍然有自己的内存单元,但它指向的对象不明确。通常,void *指针只有几种有限的用途:
1.与另一个指针进行比较
2.指向函数传递void *指针或从函数返回void *指针
3.给另一个void *指针赋值。
4.关于指针的术语:0值指针 称空指针 没有初始化的指针 称野指针 指针指向的对象已经释放 称迷途指针
指针的运算:
指针的运算主要是给定范围内指针的算术运算、比较运算、类型转换等。由于指针数据的特殊性,因此要特别注意指针运算的地址意义。
1.指针的算术运算
(1).指针加减整数运算
设p是一个指针,n是一个整形,则p+n的结果是一个指针,指向【p所指对象】后的第n个【对象】
即 p+n*sizeof(TYPE)
(2)指针变量的自增自减运算:类(1)
运算级问题:
*p++等价于*(p++)
*++p等价于*(++p)
(3)两个指针相减运算
设p1,p2是同一个指向类型的两个指针,则p1-p2的结果为两个指针之间对象的个数,如果p2的地址值大于p1结果为正,否则为负。
2.指针的关系运算
设p1,p2是同一个指向类型的两个指针,则p2和p1可以进行关系运算,用于比较这两个地址的位置关系
运算符:==、!=、>、<
3.指针的类型转换
4.指针的赋值运算
5.void * 指针的元算特殊性
void *指针不能进行算术运算,原因是指向的类型不明确,因而就无法确定指针运算后的指向。
可以将其强制类型转换后再运算,即必须是指向完整类型对象的指针才能进行运算
6.数组指针
指向类型 (*指针变量名) [][][]....
7.指针数组
指向类型 *数组名[][][][]....
即每一个元素都是一个指针
8.指向指针的指针
多级指针
9.指向字符串的指针
10.指向函数的指针
函数的引用方式:
(*函数指针)(实参) 或 函数指针(实参)

浙公网安备 33010602011771号