作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我更改了代码,以便它可以接受 void 指针转换中的 float 并在函数中使用它,但是当它在调整之前使用 int 时,它会导致“从类型分配给类型‘float’时出现不兼容的类型” 'void *'"在我将其更改为 float 之后,有人可以帮助我在哪里犯了错误吗?
#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);
但请记住在退出之前释放分配。
关于c - 如何将 void 指针转换为 float 以在 C 函数中使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58904609/
我是一名优秀的程序员,十分优秀!