如果我有一个被称为很多次的函数,并且该函数需要一个16个指针的数组,每次调用时都会用新指针更新,这是声明这个数组的正确方法?
char** readUserInput() {
static char* cmds[16];
...
}
这个数组会被初始化一次吗?
答案 0 :(得分:4)
是的,静态变量只初始化一次。通过声明变量Toolbar
,您声明了一个16 cmds
的数组。数组初始化为零。该数组永远不会再次初始化。
以此代码为例:
char*
打印:
0 0 0 0 0
答案 1 :(得分:3)
只有声明一次,无论它是否包含static
存储说明符。不要将声明与生命周期混淆。
如果真正的问题是“只有一个 cmds
的实例,并且其内容会在来电之间持续吗?”,那么是。它使用static
存储类说明符声明。根据C11标准的§6.2.4.3
...它的生命周期是整个程序的执行,它的存储值只在程序启动之前初始化一次。“
答案 2 :(得分:2)
静态变量仅初始化/声明一次,静态关键字对于在整个程序中提供生命周期很有用,但限制了它们的范围。
答案 3 :(得分:2)
目前还不清楚是否必须从hot函数返回该数组。如果是,则 为静态或必须作为参数传递。即使没有,那么"速度"也没有区别。在静态数组和自动数组之间,因为你的重用方案无论如何都应该在调用之前有[pre-op]预初始化的方法,无论第一个初始值是什么。
静态存储的缺点是代码变得不可重入。将其作为参数传递将是更正确的解决方案。