指针是什么
指针是编程语言中的一个对象,利用地址,它的值直接指向存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的存储单元。即:指针就是变量,用来存放地址的变量。
指针数组
指针数组是一个存放指针的数组
int *arr[10] //存放整型指针的数组
数组指针
指向数组的指针
int (*p)[10] //p先和*结合,说明p是一个个针变量,指向一个大小为10个整型的数组([]的优先级高于* 所以数组指针必须加())
函数指针
函数指针是指向函数的指针变量。C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。函数指针有两个用途:调用函数和做函数的参数。
函数指针的申明方法:返回值类型(*指针变量名)([形参变量名]);
int func(int x);//声明一个函数
int (*f)(int x);//声明一个函数指针
f=func;//将func函数的首地址赋给指针
f=&func;//等价于f=func
例:
//函数指针调用函数
#include<stdio.h>
int max(int x, int y)
{
return(x > y ? x : y);
}
int main()
{
int(*ptr)(int , int );
int a, b, c;
ptr = max;
scanf_s("%d%d", &a, &b);
c = (*ptr)(a, b);
printf("a=%d,b=%d,max=%d", a, b, c);
system("pause");
return 0;
}
函数指针数组
把函数的地址存到一个数组中,那这个数组就叫做函数指针数组。
int (*p[10])();//p先和[]结合,说明它是数组,数组内容是int(*)()类型的函数指针
指向函数指针数组的指针
是一个指针,指向一个数组,数组的元素是函数指针。
关于其定义:
void test(const char*str)
{
printf("%s\n",str);
}
int main()
{
//函数指针p
void (*p)(const char*)=test;
//函数指针数组parr
void(*parr[5])(const char*str);
parr[0]=test;
//指向函数指针数组parr的指针pparr
void(*(*pparr)[10])(const char*)=&parr;
return 0;
}
代码解析
void (signal(int,void(*)(int)))(int);
1>函数:signal
2>函数参数:一个是整型,一个是函数指针(这个指针指向的函数有一个整型参数,返回类型为void)
3>signal函数的返回类型为一个函数指针,该指针指向的函数有一个整型参数,返回类型为void