首页 > 解决方案 > 如何将 void 指针转换为要在 C 中的函数中使用的浮点数?

问题描述

我更改了一个代码,以便它可以接受 void 指针强制转换中的浮点数并在函数中使用它,但是当它在对其进行调整之前使用 ints 时,在从类型 '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);
} 

标签: ccastingvoid-pointers

解决方案


问题线是

sq_int = square(&x);

因为也square返回void*

您需要square通过返回指向结果的指针来处理两者的返回,例如

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);

但请记住在退出之前释放分配。


推荐阅读