gpt4 book ai didi

c - 一个函数 "remember"怎么可能是它下次使用的结果?

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

我怎样才能让函数记住它的返回结果?

例如:

char * foo(char * str1, char * str2){
...
return bar;
}

int main(){
...
foo(a,b); //returns a string
foo(NULL,c);//will use the returned above string in the NULL parameter
}

这类似于 strtok 的工作方式。

我想全局变量可以工作,但据我所知这不是好的做法,还有其他方法吗? strtok 是否适用于全局变量?

最佳答案

这就是 C 中的 static 关键字的作用。 有点!小心,请参阅下面的编辑。

具有static 存储类的变量将在程序的整个生命周期内存在,而不仅仅是声明范围的末尾:

int foo()
{
static int counter = 0;
counter ++;
return counter;
}

将在连续调用时返回 1,2,3...

编辑:评论者似乎同意警告您 static 如果您正在进行并发访问(即多线程)是危险的,我同意这一点。但是话又说回来,您已经意识到全局变量可能有害,因此这可能不是什么新鲜事,并且考虑到您问题的性质,您可能不在您的编程生涯中进行多线程处理;如果您正在这样做,请参阅任何向您介绍多线程的内容,以了解修改共享状态(信号量/互斥量...)的安全方法。

EDIT2:这当然不仅在多线程环境中是危险的;例如,当两个不同的函数在内部调用 foo 并期望看到它们自己的 1,2,3... 序列时,事情就会出错。请格外小心使用。

EDIT3:第三,@sashoalm 的答案是正确的,最适合您的问题标题。 static 更适用于不可变的、一次性可初始化的状态,而不是用于可以在几乎任何环境中爆发的可修改事物。所以在这里我引用最重要的一行 of the best answer在这里,既然你已经决定接受我的回答,这可能会误导后来的读者:

So the most correct answer is NO, you cannot do that in C, and no, static is not the answer.

关于c - 一个函数 "remember"怎么可能是它下次使用的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28661264/

26 4 0
文章推荐: node.js - MongoDB 按日期聚合
文章推荐: Python Pandas - 不要按 y 轴值对条形图进行排序
文章推荐: node.js - 对象 # 没有方法 'on' ?