公司主页网站怎么做,网站设计应该遵循的原则,wordpress安装中文,asp学校网站系统大家好#xff01;我快马加鞭接着写出指针部分part2部分。第一部分见#xff1a;c语言进阶部分详解#xff08;指针进阶1#xff09;_总之就是非常唔姆的博客-CSDN博客
指针初阶部分见#xff1a;c语言进阶部分详解#xff08;指针初阶#xff09;_总之就是非常唔姆的博…大家好我快马加鞭接着写出指针部分part2部分。第一部分见c语言进阶部分详解指针进阶1_总之就是非常唔姆的博客-CSDN博客
指针初阶部分见c语言进阶部分详解指针初阶_总之就是非常唔姆的博客-CSDN博客 一.函数指针
1.讲解与实例 函数指针 在C语言中函数指针是指向函数的指针变量。它可以像其他变量一样存储在内存中并且可以通过函数指针来调用相应的函数。 声明函数指针returnType (*pointerName)(parameterTypes); 其中 returnType 是函数的返回类型。pointerName 是函数指针的名称。parameterTypes 是函数的参数类型 // 定义一个函数
int add(int a, int b) {return a b;
}int main()
{// 声明一个函数指针int (*funcPtr)(int, int);// 将函数指针指向add函数funcPtr add;// 通过函数指针调用函数int result funcPtr(2, 3); // 结果为5 平时调用函数时都是函数名地址也可以想通int result (*funcPtr)(2, 3); // 这两种均可以funcPtr是地址通过*解引用来找到return 0;
} 2.《C陷阱和缺陷》中两段经典代码
2.1 ( * ( void ( * )( ) ) 0 ) ( ); //代码1 ( * ( void ( * )( ) ) 0 ) ( ); void ( * )( )这是一个函数指针的类型声明。它表示一个没有参数并且返回类型为void的函数指针( void ( * )( ) 0 这是对0进行强制类型转化转换为函数指针类型* ( void ( * )( ) ) 0 对地址为0的函数地址解引用 ( * ( void ( * )( ) ) 0 ) ( ) 调用这个函数 2.2void ( * signal( int , void( * ) ( int ) ) ) (int); //代码2 void ( * signal( int , void( * ) ( int ) ) ) (int); void (*signal(int, void (*)(int)))(int)这是一个函数声明的语法。它表示signal是一个函数接受两个参数一个int类型的参数和一个指向接受int类型参数并返回void的函数指针的参数。该函数返回一个指向接受int类型参数并返回void的函数指针的结果 二.函数指针数组
1.讲解与实例 函数指针数组 函数指针数组是一个数组其中的每个元素都是一个函数指针。可以将不同的函数指针存储在数组中并根据需要使用它们 声明函数指针数组return_type (*array_name[size])(parameter_list); return_type函数指针指向的函数的返回类型。(*array_name)函数指针数组的名称。它是一个指针指向一个数组。[size]函数指针数组的大小。它表示数组中函数指针的数量。(parameter_list)函数指针指向的函数的参数列表 相比于函数指针只是多了一个[ ]在函数名后面而已 // 定义函数1
void func1(int num) {printf(This is function 1. Number: %d\n, num);
}// 定义函数2
void func2(int num) {printf(This is function 2. Number: %d\n, num);
}// 定义函数3
void func3(int num) {printf(This is function 3. Number: %d\n, num);
}int main() {// 将函数指针赋值给函数指针数组的元素void(*pf[3])(int) { func1,func2, func3 };// 调用函数指针数组中的函数for (int i 0; i 3; i) {pf[i](i);}return 0;
} 2.使用来实现计算器 void menu()
{printf(******************************\n);printf(*** 1.add 2.sub ***\n);printf(*** 3.mul 4.div ***\n);printf(*** 0.exit ***********\n);printf(******************************\n);
}int add(int x, int y)
{return x y;
}
int sub(int x, int y)
{return x - y;
}
int mul(int x, int y)
{return x * y;
}
int div(int x, int y)
{return x / y;
}int main()
{int input 1;int result 0;int a 0;int b 0;while (input){menu();printf(请输入:\n);scanf(%d, input);//根据menu来输入数字啦int(*pf[5])(int, int) { NULL,add,sub,mul,div };//第一个是NUll是为了使数字与菜单对应if (input 1 input 4){printf(请输入两个数\n);scanf(%d %d, a, b);result pf[input](a, b);printf(%d\n, result);}else if(input0){printf(退出计算器);}else{printf(输入有误请重新输入);}}return 0;
} 三.指向函数指针数组的指针 指向函数指针数组的指针是一个 指针指针指向一个数组 数组的元素都是函数指针 指向函数指针数组的指针的语法如下 return_type (*(*pointer_name)[size])(parameter_list); return_type函数指针指向的函数的返回类型。(*pointer_name)指向函数指针数组的指针的名称。它是一个指针指向一个函数指针数组。[size]函数指针数组的大小。它表示数组中函数指针的数量。(parameter_list)函数指针指向的函数的参数列表 相比与函数指针数组只是在名字前多一个*来说明是指针而已 四.回调函数
1.讲解 回调函数就是一个通过函数指针调用的函数。如果你把函数的指针地址作为参数传递给另一个函数当这个指针被用来调用其所指向的函数时我们就说这是回调函数。回调函数不是由该函数的实现方直接调用而是在特定的事件或条件发生时由另外的一方调用的用于对该事件或条件进行响应 2.事例
int add(int x, int y)
{return x y;
}// 定义一个回调函数
void callback(int result)
{printf(回调函数被调用结果为%d\n, result);
}// 定义一个函数接受一个函数指针作为参数
void performOperation(int (*operation)(int, int), int a, int b, void (*callback)(int))
{int result operation(a, b);callback(result);
}int main()
{// 调用函数并传递回调函数作为参数performOperation(add, 2, 3, callback);return 0;
} 今天的内容先到这里了下一次不出意外是针对回调函数进行更加详细事例演示及模拟。
感谢大家的支持