如何解决将指针地址分配给指针的问题
void funCall(float *inp,int INPLen,float *out,char Case)
{
if(case == 0)
{
memcpy(out,inp,INPLen*4);
}
else if(case == 1)
{
// Out will be result of arithmetic operations on **inP**
variable.
}
}
在情况0中,如果我使用
输出=(浮点*)输入;
代替 memcpy ,变量 Out 仅在函数内部保存输入值。是什么原因呢?
解决方法
在C参数中,通过值传递参数。这意味着它们实际上是用于调用该函数的变量的副本。对它们执行的任何修改都会在功能之外丢失(这正是您所经历的)。
如果所需的行为是对参数的修改,则必须使用指针。因此,如果您需要修改int
,请将其地址(将为int *
)传递给函数。
在您的情况下,您想要修改指针(float *
),因此需要传递双指针float **
)。
因此,只需将out
更改为float **
:
void funCall(float *inp,int INPLen,float **out,char Case)
{
if(case == 0)
{
*out = inp;
}
else if(case == 1)
{
// modify accordingly the way you access out
}
}
当然,您调用此函数的方式也会改变。举个例子:
float in[3] = { 0.3,3.45,6.789 };
float *output;
funcall(in,3,&output,0);
因此,传递output
的地址float *
,我们得到一个float **
。
函数参数是函数局部变量,通过用作参数的变量值的副本进行初始化。
因此,在函数内更改了局部变量out
,该变量由作为参数传递给函数的指针的值初始化。原始指针未更改,因为该函数处理的是分配给指针out的值的副本。
要更改对象,您需要通过指向它的指针间接通过引用传递它。
这就是你的函数可以这样声明
void funCall(float *inp,char Case);
并且您可以在函数中编写
*out = inp;
在这种情况下,通过类型out
间接指向函数float **
的指针传递给函数的原始指针将在函数内更改。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。