本问题对应文章链接:C++常见面试题整理
(1.)定义:本质是一个指针变量,存储一个函数的地址
(2.)声明: 类型 (*指针名)(参数);,示例如下:
类型 (*指针名)(参数);
int add(int x,int y) { return x + y; } int main() { int (*ptr)(int,int); //声明 也可以int (*ptr)(int a, int b); ptr = add; //初始化,把一个函数的地址赋值给函数指针 方法一:ptr = add; 方法二:ptr = &add; 函数名就是该函数的函数指针 cout<<(*ptr)(1, 2)<<endl; //调用函数指针 方法一:ptr(1, 2); 方法二:(*ptr)(1, 2); return 0; }
(3.)为什么要使用函数指针?
答: 用途一:回调函数,函数指针允许我们将一个函数A作为参数传递给另一个函数B,函数B就是回调函数,这样在函数B内部就可以借助函数A来实现某些功能,这样当函数A需要更改的话,我们只需要修改函数指针的指向即可。
用途二:运行时决定调用的函数,函数指针使我们能够在运行时根据需要选择调用不同的函数。例如排序方式有很多种,但是返回值和参数都是相同的,因此当我们需要调用不同的排序时,只需修改函数指针的指向,然后使用同一个函数指针来调用不同的排序方式就可以了。
(1.)定义:本质是一个函数,其返回值是一个指针
(2.)声明:类型* 函数名(参数);,示例如下:
类型* 函数名(参数);
int* getSum(int n) { //求和,1~n static int sum = 0; int* ret = ∑ //ret是指向sum的指针 for(auto i : n) { sum += i; } return ret; } int main() { int* ptr = getSum(10); //使用一个整型指针来接收函数返回的指针 cout<<*ptr<<endl; return 0; }
(3.)使用注意
不要返回在栈区(局部变量)的变量的指针,否则该变量生命周期结束后,指针指向的内容就会失效;
若指针函数返回的是一个指向一块动态分配内存得到的地址,那么接收指针要负责释放内存。
(2.)声明: 类型 (* 指针名)(参数);,示例如下:
类型 (* 指针名)(参数);
答:用途一:回调函数,函数指针允许我们将一个函数A作为参数传递给另一个函数B,函数B就是回调函数,这样在函数B内部就可以借助函数A来实现某些功能,这样当函数A需要更改的话,我们只需要修改函数指针的指向即可。
(2.)声明:类型*函数名(参数);,示例如下:
类型*函数名(参数);
共以下 2 个回答
1、函数指针
(1.)定义:本质是一个指针变量,存储一个函数的地址
(2.)声明:
类型 (*指针名)(参数);,示例如下:(3.)为什么要使用函数指针?
答:
用途一:回调函数,函数指针允许我们将一个函数A作为参数传递给另一个函数B,函数B就是回调函数,这样在函数B内部就可以借助函数A来实现某些功能,这样当函数A需要更改的话,我们只需要修改函数指针的指向即可。
用途二:运行时决定调用的函数,函数指针使我们能够在运行时根据需要选择调用不同的函数。例如排序方式有很多种,但是返回值和参数都是相同的,因此当我们需要调用不同的排序时,只需修改函数指针的指向,然后使用同一个函数指针来调用不同的排序方式就可以了。
2、指针函数
(1.)定义:本质是一个函数,其返回值是一个指针
(2.)声明:
类型* 函数名(参数);,示例如下:(3.)使用注意
不要返回在栈区(局部变量)的变量的指针,否则该变量生命周期结束后,指针指向的内容就会失效;
若指针函数返回的是一个指向一块动态分配内存得到的地址,那么接收指针要负责释放内存。
1、函数指针
(1.)定义:本质是一个指针变量,存储一个函数的地址
(2.)声明:
类型 (* 指针名)(参数);,示例如下:(3.)为什么要使用函数指针?
答:用途一:回调函数,函数指针允许我们将一个函数A作为参数传递给另一个函数B,函数B就是回调函数,这样在函数B内部就可以借助函数A来实现某些功能,这样当函数A需要更改的话,我们只需要修改函数指针的指向即可。
用途二:运行时决定调用的函数,函数指针使我们能够在运行时根据需要选择调用不同的函数。例如排序方式有很多种,但是返回值和参数都是相同的,因此当我们需要调用不同的排序时,只需修改函数指针的指向,然后使用同一个函数指针来调用不同的排序方式就可以了。
2、指针函数
(1.)定义:本质是一个函数,其返回值是一个指针
(2.)声明:
类型*函数名(参数);,示例如下:(3.)使用注意
不要返回在栈区(局部变量)的变量的指针,否则该变量生命周期结束后,指针指向的内容就会失效;
若指针函数返回的是一个指向一块动态分配内存得到的地址,那么接收指针要负责释放内存。