首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C/ pow枚举

C/ pow枚举
EN

Stack Overflow用户
提问于 2021-12-08 16:46:17
回答 2查看 68关注 0票数 0

我创建了3个void函数,它将返回给定pow ( int、float或double)的结果到原点。

代码语言:javascript
复制
#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个参数,然后决定从上面执行哪个函数。

代码语言:javascript
复制
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);
    }
}

我现在确实有一个问题,当我给他函数一个空指针,它将不会编译,因为转换。我不明白我在这里做错了什么。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-12-08 16:51:23

使用正确的指针类型调用dereference b的函数,而这些函数不返回任何内容,因此不需要在my_pow中设置任何内容

代码语言:javascript
复制
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);
    }
}
票数 0
EN

Stack Overflow用户

发布于 2021-12-08 16:51:17

第一个问题:您的my_pow_*函数返回void,因此*b = my_pow...无法工作。它不需要,因为你在你的功能中做一个就地的任务。

如果您修复了它,您只需将您的函数调用为

代码语言:javascript
复制
double val = 3.0;
my_pow(&val, 2, BASE_TYPE_DOUBLE);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70278708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档