定义: 一般形式:类名标识符 *指针变量名;
int *p;
float *q;
前面的类型标志符表示指针变量所只想的变量的类型,而且只能指向这种类型的变量
示例1:值交换
示例2:函数多个返回值
示例3:用指针遍历字符串
指针也是C语言中的一种数据类型,因此一个函数的返回值肯定可以是指针类型的。
返回指针的函数的一般形式为:类型名 * 函数名(参数列表)
示例4:比如下面这个函数,返回一个指向char类型变量的指针
指向函数的指针函数作为一段程序,在内存中也要占据部分存储空间,它也有一个起始地址,即函数的入口地址。函数有自己的地址,那就好办了,我们的指针变量就是用来存储地址的。因此,可以利用一个指针指向一个函数。其中,函数名就代表着函数的地址。
定义的一般形式:函数的返回值类型 (*指针变量名)(形式参数1, 形式参数2, ...);
指向指针的函数注意
1> 由于这类指针变量存储的是一个函数的入口地址,所以对它们作加减运算(比如p++)是无意义的。难道p++就会指向下一个函数了?可笑至极!!没这回事。
2> 返回指针的函数的定义char upper(char str) 和 指向函数的指针的定义int ( *p)(int a, int b)非常相似,使用时特别注意区分
3> 指向函数的指针变量主要有两个用途:
调用函数
将函数作为参数在函数间传递。我这么一说,可能还不是很明白,举个例子。
每个结构体变量都有自己的存储空间和地址,因此指针也可以指向结构体变量
结构体指针变量的定义形式:struct 结构体名称 *指针变量名
有了指向结构体的指针,那么就有3种访问结构体成员的方式
结构体变量名.成员名
(*指针变量名).成员名
指针变量名->成员名