c++ 子函数 指针
时间: 2023-11-11 08:06:19 浏览: 37
函数指针是指向函数的指针变量,可以将函数的地址赋值给函数指针,从而通过函数指针调用该函数。在C语言中,我们可以使用函数指针来实现回调函数、动态调用函数等功能。
下面是一个函数指针的示例:
```c
#include <stdio.h>
void printHello() {
printf("Hello, world!\n");
}
int main() {
void (*funcPtr)() = printHello; // 声明一个函数指针变量并赋值为printHello函数的地址
funcPtr(); // 通过函数指针调用printHello函数
return 0;
}
```
输出结果为:
```
Hello, world!
```
在上面的示例中,我们先定义了一个名为printHello的函数,然后声明了一个函数指针变量funcPtr,类型为`void (*)()`,即指向不带参数且返回类型为void的函数。然后将printHello函数的地址赋值给funcPtr,最后通过funcPtr调用printHello函数。
相关问题
c++指针实现子函数四则运算的代码
以下是一个简单的示例代码,用指针实现子函数四则运算:
```c
#include <stdio.h>
void add(int *a, int *b, int *c) {
*c = *a + *b;
}
void sub(int *a, int *b, int *c) {
*c = *a - *b;
}
void mul(int *a, int *b, int *c) {
*c = *a * *b;
}
void div(int *a, int *b, int *c) {
*c = *a / *b;
}
int main() {
int a = 10, b = 5, c;
add(&a, &b, &c);
printf("%d + %d = %d\n", a, b, c);
sub(&a, &b, &c);
printf("%d - %d = %d\n", a, b, c);
mul(&a, &b, &c);
printf("%d * %d = %d\n", a, b, c);
div(&a, &b, &c);
printf("%d / %d = %d\n", a, b, c);
return ;
}
```
注意:这只是一个简单的示例代码,实际应用中需要考虑更多的情况和错误处理。
C++函数指针用来表示在float和double的blas函数
BLAS(Basic Linear Algebra Subprograms)是一组基本的线性代数子程序,提供了高效的矩阵和向量计算。在BLAS中,float和double类型的矩阵和向量计算都有对应的函数。
在C++中,函数指针可以用来表示BLAS中的函数。例如,对于float类型的矩阵和向量乘法,可以使用以下函数指针:
```c++
typedef void (*sgemm_ptr)(char *, char *, int *, int *, int *, float *, float *, int *, float *, int *, float *, float *, int *);
```
这个函数指针表示了BLAS中的sgemm函数,它接受一些参数,包括两个字符参数,三个整数参数,三个浮点数指针参数和一个整数指针参数。这个函数指针可以用来调用sgemm函数,例如:
```c++
sgemm_ptr my_sgemm = &sgemm;
char transa = 'N';
char transb = 'N';
int m = 100;
int n = 200;
int k = 150;
float alpha = 1.0f;
float *a = new float[m*k];
float *b = new float[k*n];
float beta = 0.0f;
float *c = new float[m*n];
int lda = k;
int ldb = n;
int ldc = n;
my_sgemm(&transa, &transb, &m, &n, &k, &alpha, a, &lda, b, &ldb, &beta, c, &ldc);
```
这个例子调用了sgemm函数,对两个矩阵a和b进行乘法,结果存储在矩阵c中。类似地,对于double类型的矩阵和向量计算,可以使用以下函数指针:
```c++
typedef void (*dgemm_ptr)(char *, char *, int *, int *, int *, double *, double *, int *, double *, int *, double *, double *, int *);
```
这个函数指针表示了BLAS中的dgemm函数,其余用法和sgemm函数类似。