c - 如何将 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);
}
解决方案
问题线是
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);
但请记住在退出之前释放分配。
推荐阅读
- python - 基于另一列的数据框中列的模式
- if-statement - 如何与乳胶中的宏进行比较
- axapta - FormRun.wait(): 方法已弃用,改用什么?
- android - 带手机调试的安卓模拟器
- windows - Powershell 无法识别 PackageManagement Cmdlet
- javascript - 如何检查 Mozilla Firefox 中使用的扩展/附加组件是否是新标签扩展?
- python - Astropy 无法解析英寸
- spring - EventListener 和可重试
- ruby-on-rails - 将 curl 请求转换为 Rails Net::HTTP
- android - 如何仅显示当前月份并预览在 datePickerDialog 中可选择的月份日期?