[英]Best way to modify and return two float (or double) in a function?
我试图返回两个值, u
和v
,我将它们作为 arguments 传递给 function get_uv( float u, float v )
。
因为 double 和 float 与 integer 类型不兼容,我们无法将它们转换为指针,下面的代码给出错误:无法转换为指针类型。
void calc_uv( float *u, float *v )
{
u = (float *) 0.0f;
v = (float *) 1.0f;
}
void anyfunction()
{
float u, v;
calc_uv( &u, &v )
printf("u: %f , v: %f", u, v);
}
如果我使用它会起作用:
void calc_uv( float *u, float *v )
{
*u = 0.0f;
*v = 1.0f;
}
但我不明白为什么,因为 u 和 v 已经是指针。 你能解释一下这里发生了什么吗?
从 function 修改和返回两个浮点数的最佳方法是什么?
我看到我可以使用类似float *f = malloc(sizeof *f);
但我的目标不是不择手段地获取指针,而是以最优雅或简洁的方式更改输入值。
但我不明白为什么,因为
u
和v
已经是指针。 你能解释一下这里发生了什么吗?
是的,function 接收这些变量作为指针。 它们包含什么? 在anyfunction()
function 中分配的变量的地址。
现在您的意图应该是通过执行*u
取消引用指针来修改此“地址”位置,这意味着将地址处的值“修改”为新值。 但是您实际上是通过执行u = (float *) 0.0f;
,这是完全错误的,因为指针存储的是地址而不是值。
“但我不明白为什么,因为
u
和v
已经是指针。你能解释一下这里发生了什么吗? ”
您的困惑似乎是基于您没有正确理解指针在 C 中的工作原理,并且我们使用*
运算符取消引用指针以访问它们实际指向的对象。
如果您使用:
void calc_uv( float *u, float *v )
{
*u = 0.0f;
*v = 1.0f;
}
*u
in *u = 0.0f;
和*v
中的*v = 1.0f;
不是指针本身的第二次声明。
这些是使用*
运算符对指针进行的操作,以解除对指针u
和v
的引用,目的是访问它们在调用者中指向的对象。
看看这里:
https://en.wikipedia.org/wiki/Dereference_operator
边注:
return
值。float u, v;
calc_uv( &u, &v )
&u
表示对u
的引用(指针)
&v
表示对v
(指针)的引用
void calc_uv( float *u, float *v )
float *u
- 指向浮动的指针
float *v
- 指向浮动的指针
u = (float *) 1.0f;
您将指针分配为 1.0f 转换为浮点指针。 在这种情况下没有任何意义。
您需要取消引用(访问指针指向的 object)指针
*u = 1.0f
我想我理解你的困惑。 *
有不同的含义,具体取决于它的使用位置。
float *f;
它向编译器显示f
是指针。*f = 1.0f;
if 显示您取消引用指针f
的编译器。 它不会再次声明/定义它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.