如何将 void 指针转换为 float 以在 C 函数中使用?

How to cast a void pointers to float to be used in a function in C?

我更改了一个代码,以便它可以接受空指针转换中的浮点数并在函数中使用它,但是当它在调整它之前使用整数时,在我将它更改为 "incompatible types when assigning to type 'float' from type 'void *'" 之后漂浮,有人可以帮助我在哪里犯错吗?

#include <stdio.h>

void * square (const void *num);

int main() {
  float x, sq_int;
  x = 6.543;
  sq_int = square(&x);
  printf("%f squared is %f\n", x, sq_int);
  return 0;
}

void* square (const void *num) {
  static float result;
  result = (*(float *)num) * (*(float *)num);
  return(result);
} 

问题行是

sq_int = square(&x);

因为 square returns void* 也是。

您需要通过 return 指向结果的指针来处理 square 的 return,例如

return &result;

并主要将其提取为:

sq_int = *(float *)square(&x);

这是个坏主意,因为您正在访问一个不再位于堆栈中的变量。


或者更好,先将其存储在堆中,例如

void* square (const void *num) {
  float *result = malloc(sizeof(float));
  *result = (*(float *)num) * (*(float *)num);
  return result;
} 

并主要将其提取为:

sq_int = *(float *)square(&x);

但是记得在退出之前释放分配。

你需要做两件事。

转换 return 类型:

sq_int = *(float*) square(&x);

Returnresult.

地址
return &result;