我創建了 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);
}
}
我現在確實有一個問題,當我給他的函式一個空指標時,它不會因為轉換而編譯。我不明白我在這里做錯了什么。
uj5u.com熱心網友回復:
您使用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);
}
}
uj5u.com熱心網友回復:
第一個問題:你的 my_pow_* 函式回傳 void,所以*b = my_pow...不起作用。它不需要,因為您正在函式中進行就地分配。
如果你解決了這個問題,你可以將你的函式稱為
double val = 3.0;
my_pow(&val, 2, BASE_TYPE_DOUBLE);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/384348.html
上一篇:如何擦除指標向量的某些元素
