C语言中的指针
一个简单的实例
首先从最简单的实例开始
int a; //定义一个int类型的变量
int *p = &a; //定义一个指针并将a的地址赋给指针
*p = 3; //将指针p中的值修改为3
printf("指针所指向的值:%d \n", *p);
指针函数
在了解了变量的指针后,进一步可以深入函数指针。
int product(int a, int b){
return a * b;
}
int max(int a, int b){
return a > b ? a : b;
}
int main(){
int (*func)(int, int);
func = max;
printf("%d \n", func(2, 3));
func = product;
printf("%d \n", func(2, 4));
system("pause");
return 0;
}
这里定义了一个函数指针func,注意函数指针定义返回值类型的时候需要加括号(*func)。
回调函数
“回调函数是由别人的函数执行时调用你实现的函数。”
#include <stdio.h> //标准IO
#include <stdlib.h> //标准lib
// 取得数组值
void input_arr(int *arr, int arrSize, int (*getNextValue)(void))
{
for (int i=0; i<arrSize; i++)
arr[i] = getNextValue();
}
// 回调函数--获取随机值
int getNextRandomValue(void)
{
printf("Enter function getNextRandomValue! \n");
return rand();
}
// 回调函数--获取给定值
int getSortNum(void){
printf("Enter function getSortNum! \n");
static int num = 0;
num++;
return num;
}
int main(){
int myarray[10];
input_arr(myarray, 10, getNextRandomValue);
for(int i = 0; i < 10; i++) {
printf("%d ", myarray[i]);
}
input_arr(myarray, 10, getSortNum);
for(int i = 0; i < 10; i++) {
printf("%d ", myarray[i]);
}
printf("\n");
system("pause");
return 0;
}
这里input_arr分别调用了回调函数getNextRandomValue和getSortNum10次。 程序的输出为
|