gpt4 book ai didi

c - 将函数参数分配给C中的局部静态变量,并在递归中保留第一个值

转载 作者:太空宇宙 更新时间:2023-11-04 01:18:56 25 4
gpt4 key购买 nike

我在尝试定义局部静态变量时遇到此错误。

Initializer element is not constant.

我想在此递归中保留 var 的第一个值。如何通过这个?希望您也能阐明将参数分配给要防止的局部静态变量的副作用。

int function(int var)
{
static int index=var;
//some code ...
return var==0?1:function(var-1);
}

最佳答案

static 变量甚至在函数启动之前就已初始化。它就像一个全局变量,只有函数作用域。编译器不能使用它还不知道的值。

您可以使用辅助 bool 值解决此问题:

int function(int var)
{
static int index_is_set=0;
static int index;
if (!index_is_set)
{
index = var;
index_is_set = 1;
}

//some code ...
return var==0?1:function(var-1);
}

所以当您第一次进入该函数时,它会设置值,将 bool 标志设置为 1,这样它就不会被以后的调用覆盖。

请注意,这作为构造不是很有用,因为如果您要在程序中第二次递归调用您的函数(我的意思是在第一次获得结果之后),则无法重置变量(除非您将 index_is_set 设置为全局变量,这样您就可以从外部重置它)。

请注意,通过将起始值用作额外参数,可以完全摆脱所有这些 static 东西。

int function(int var, int start_value)
{
// ...
return var==0 ? 1 : function(var-1,start_value);
}

第一个电话是这样的:

function(20,20);

或包裹在隐藏此实现的函数中:

int function_wrapper(int var)
{
return function(var,var);
}

起始值随所有调用一起传递。消耗更多的自动变量空间,但更干净,没有内存效应并且更容易调试。

关于c - 将函数参数分配给C中的局部静态变量,并在递归中保留第一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49213361/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com