#include
int main()
{
int a = 10;
int* p = &a;
}
//对于指针的作用可以在一个很典型的交换函数中感受到
#include
#include
int main()
void Swap(int a1, int a2)
{
a1 ^= a2;
a2 ^= a1;
a1 ^= a2;
} //传值
void _Swap(int* p1, int* p2)
{
assert(p1);
assert(p2);
*p1 ^= *p2;
*p2 ^= *p1;
*p1 ^= *p2;
} //传址
{
int a = 10;
int b = 20;
Swap(a, b);
_Swap(&a, &b);
return 0;
}
函数指针是指向函数的指针变量。 因此“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。函数指针有两个用途:调用函数和做函数的参数。
//函数指针的使用
//当一个函数的某个参数是另外一个参数时的情况
//举例大小堆的构建方法
#include
void _Big(...)
{
...
}//构建大堆
void _Small(...)
{
...
}//构建小堆
void (*Ptr)(...); //函数指针指向大小堆的一系列类型指针
void CreateHepa(int* arr, int size, void (*Ptr)(...))
{
...
}
int main()
{
int arr[] = {...};
int size = sizeof(arr)/sizeof(arr[0]);
CreateHeap(arr, size, _Big);
CreateHeap(arr, size, _Small);
}
函数指针数组是由函数指针构成的数组,在编程的过程中,就类似普通数组是一连串类型相同的变量集合, 函数指针数组就是指向一连串返回值相同, 参数类型相同的函数集合
//函数指针数组实现加减法计算器
#include
i
int _Addtion(int a, int b)
{
return a + b;
}
int _Substraction(int a, int b)
{
return a - b;
}
int (*Ptr[])(int a, int b)//函数指针数组
= {_Addtion, _Substraction};
int Cal(void)
{
int a = 0;
int b = 0;
int ret = 0;
char mark;
scanf("%d%d", &a, &b);
scanf("%c", &mark);
switch(mark)
{
case mark == '+':
ret = Ptr[1](a, b);
break;
case mark == '-':
ret = Ptr[2](a, b);
break;
}
return ret;
}
int main()
{
printf("%d", Cal());
return 0;
}