1、指针函数
1-1、定义
指针函数,顾名思义,是一个函数,但其返回类型是指针。这意味着当这个函数被调用时,它会返回一个地址值,这个地址值指向某个类型的数据。
1-2、特点
函数性质:首先,它是一个函数,有函数名、参数列表和函数体。
返回类型:函数的返回类型是指针,可以是任何类型的指针,如整型指针、字符型指针等。
返回值接收:在调用指针函数时,需要使用同类型的指针变量来接收其返回值。
1-3、示例
int* func(int a, int b)
{
int* ptr = (int*)malloc(sizeof(int)); // 动态分配内存
*ptr = a + b; // 对分配的内存进行赋值
return ptr; // 返回指向整数的指针
}
1-4、生活举例
假如你是一家餐厅的厨师(函数),你的工作是烹饪(执行函数)。当顾客点了一道菜(调用函数),你完成烹饪后(函数执行完毕),不是直接把菜端到桌上,而是给了服务员一个托盘,托盘上放着做好的菜(返回指针)。这个托盘就是指针,指向了你烹饪好的菜品。服务员(或其他程序部分)通过这个托盘(指针)来找到并上菜(使用返回的数据)。
2、函数指针
2-1、定义
函数指针是一个指针变量,但它不指向普通的变量或数据,而是指向一个函数的首地址。通过函数指针,可以间接地调用函数。
2-2、特点
指针性质:首先,它是一个指针变量,有指针变量的所有特性。
指向函数:这个指针变量指向的是一个函数的首地址,而不是普通的数据或变量。
调用函数:通过函数指针,可以像调用普通函数一样调用它所指向的函数,并传递相应的参数。
2-3、示例
int add(int a, int b) {
return a + b;
}
int main() {
int (*funcPtr)(int, int) = add; // 函数指针指向add函数
int result = funcPtr(3, 4); // 通过函数指针调用add函数
printf("Result: %d\n", result);
return 0;
}
2-4、生活举例
再次回到餐厅的场景。这次,你不是厨师,而是一位餐厅经理。你手上有一本菜单(函数指针),菜单上的每一项都对应着一位厨师(函数)和他们的拿手菜(函数功能)。当顾客点餐时,你不需要亲自去厨房烹饪,而是翻开菜单,找到对应的厨师(通过函数指针找到函数),然后让那位厨师去准备(调用函数)。这里的菜单就相当于函数指针,它存储了厨师(函数)的位置(地址),并允许你通过这个位置来请求服务(调用函数)。