我创建了3个void函数,它将返回给定pow ( int、float或double)的结果到原点。
#include <assert.h>
#include <float.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
enum base_type { BASE_TYPE_INT, BASE_TYPE_FLOAT, BASE_TYPE_DOUBLE };
void my_pow_int(int *b, int n) {
int a = *b;
*b = pow(a,n);
}
void my_pow_float(float *b, int n) {
float a = *b;
*b = powf(a,n);
}
void my_pow_double(double *b, int n) {
double a = *b;
*b = pow(a,n);
}接下来,我创建了一个函数,它接受3个参数,然后决定从上面执行哪个函数。
void my_pow(void *b, int n, enum base_type type) {
if (type == BASE_TYPE_INT){
*b = my_pow_int(b, n);
}
if (type == BASE_TYPE_FLOAT){
*b = my_pow_float(b, n);
}
else{
*b = my_pow_double(b, n);
}
}我现在确实有一个问题,当我给他函数一个空指针,它将不会编译,因为转换。我不明白我在这里做错了什么。
发布于 2021-12-08 16:51:23
使用正确的指针类型调用dereference b的函数,而这些函数不返回任何内容,因此不需要在my_pow中设置任何内容
void my_pow(void *b, int n, enum base_type type) {
if (type == BASE_TYPE_INT){
my_pow_int(b, n);
}
else if (type == BASE_TYPE_FLOAT){
my_pow_float(b, n);
}
else{
my_pow_double(b, n);
}
}发布于 2021-12-08 16:51:17
第一个问题:您的my_pow_*函数返回void,因此*b = my_pow...无法工作。它不需要,因为你在你的功能中做一个就地的任务。
如果您修复了它,您只需将您的函数调用为
double val = 3.0;
my_pow(&val, 2, BASE_TYPE_DOUBLE);https://stackoverflow.com/questions/70278708
复制相似问题