一、函数指针和函数指针数组的区别
函数指针是指向函数的指针变量,而函数指针数组则是由函数指针组成的数组。
函数指针数组定义:
int (*funcArr[5])(int a, int b);
上面的定义中,funcArr是一个长度为5的数组,每个元素都是一个指向返回类型为int,参数类型为int和int的函数的指针。
二、函数指针的使用
函数指针可以用来调用函数,也可以作为函数的返回值或者参数。
函数指针作为形参使用:
int add(int a, int b);
void callback(int (*func)(int, int));
int main() {
callback(add);
return 0;
}
void callback(int (*func)(int, int)) {
func(1, 2);
}
上面的代码中,在主函数中调用callback函数,并将add函数的地址作为参数传入callback函数中。在callback函数中,函数指针func被调用,此时add函数也被调用,并返回了3。
三、函数指针和指针函数
函数指针是指向函数的指针变量,而指针函数则是返回值为指针的函数。
指针函数的定义及使用:
int* getArray() {
int* arr = (int*)malloc(sizeof(int) * 10);
return arr;
}
int main() {
int* ptr = getArray();
return 0;
}
上面的代码中,getArray函数返回一个int类型的指针。在主函数中,使用指针变量ptr来接收getArray函数的返回值。
四、指针函数怎么用
指针函数可以用来返回指针,也可以作为函数的参数。
指针函数作为实参使用:
void print(int* arr) {
int i;
for (i = 0; i < 10; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
void fill(int* (*getArray)()) {
int i;
int* arr = getArray();
for (i = 0; i < 10; i++) {
arr[i] = i;
}
print(arr);
}
int* getArray() {
int* arr = (int*)malloc(sizeof(int) * 10);
return arr;
}
int main() {
fill(getArray);
return 0;
}
上面的代码中,fill函数的参数是一个指向返回值为int类型指针的函数指针,即getArray函数。在fill函数内部,getArray函数被调用,并返回一个int类型的指针。fill函数利用这个指针,将其内容填充为0~9的数字,并调用print函数打印数组。
五、函数指针表
函数指针表是由函数指针构成的数组,每个函数指针指向不同的函数。我们可以通过函数指针表来实现对不同函数的动态调用。
函数指针表的定义和使用:
int add(int a, int b);
int sub(int a, int b);
int mul(int a, int b);
int div(int a, int b);
int main() {
int (*funcTable[])(int, int) = {add, sub, mul, div};
int i;
for (i = 0; i < 4; i++) {
int result = funcTable[i](10, 5);
printf("%d ", result);
}
return 0;
}
int add(int a, int b) {
return a + b;
}
int sub(int a, int b) {
return a - b;
}
int mul(int a, int b) {
return a * b;
}
int div(int a, int b) {
return a / b;
}
上面的代码中,funcTable是一个函数指针数组,其中的每个元素都是指向各自函数的函数指针。在主函数中,我们遍历函数指针表,依次调用指向的函数。
六、指针函数和函数指针的区别
指针函数返回指针类型的数据,而函数指针是指向函数的指针变量。
指针函数的用法:
int* getArray() {
int* arr = (int*)malloc(sizeof(int) * 10);
return arr;
}
int main() {
int* ptr = getArray();
return 0;
}
函数指针的用法:
int add(int a, int b);
int main() {
int (*func)(int, int) = add;
int result = func(1, 2);
return 0;
}
int add(int a, int b) {
return a + b;
}
七、指针函数和普通函数的区别
指针函数返回指针类型的数据,而普通函数则不返回指针类型数据。
指针函数的用法:
int* getArray() {
int* arr = (int*)malloc(sizeof(int) * 10);
return arr;
}
int main() {
int* ptr = getArray();
return 0;
}
普通函数的用法:
int add(int a, int b);
int main() {
int result = add(1, 2);
return 0;
}
int add(int a, int b) {
return a + b;
}
八、指针变量函数
指针变量函数是一个函数,它返回一个指针变量。
指针变量函数的用法:
int* getPointer(int value) {
int* ptr = (int*)malloc(sizeof(int));
*ptr = value;
return ptr;
}
int main() {
int* ptr = getPointer(10);
printf("%d ", *ptr);
free(ptr);
return 0;
}
在上面的代码中,getPointer函数返回一个指向int类型变量的指针变量,其中指针变量所指向的int型变量的值为函数传入的参数value。在主函数中,我们调用getPointer函数,并将其返回的指针变量的值打印出来。
九、指针与函数的关系区别
指针是一种数据类型,可以指向内存中存储的任何数据类型,包括函数。
指向函数的指针变量的用法:
int add(int a, int b);
int main() {
int (*func)(int, int) = add;
int result = func(1, 2);
return 0;
}
int add(int a, int b) {
return a + b;
}
上面的代码中,定义了一个指向函数add的函数指针变量func。在主函数中,我们遍历函数指针表,依次调用指向的函数。
十、函数指针和回调函数
函数指针可以作为回调函数使用,回调函数是指在某个事件发生时由系统调用的函数。
函数指针作为回调函数的用法:
void invoke( void (*cb)(const char*) ) {
cb("hello");
}
void myCallback(const char* str) {
printf("%s", str);
}
int main() {
invoke(myCallback);
return 0;
}
上面的代码中,myCallback函数是一个回调函数,它被invoke函数在事件发生时调用。在主函数中,我们调用invoke函数,并把myCallback函数的指针作为参数传递给它。
原创文章,作者:FHMM,如若转载,请注明出处:https://www.506064.com/n/131630.html