声明数组一次C.

时间:2015-04-25 19:57:16

标签: c arrays memory static

如果我有一个被称为很多次的函数,并且该函数需要一个16个指针的数组,每次调用时都会用新指针更新,这是声明这个数组的正确方法?

char** readUserInput() {
    static char* cmds[16];
    ...

}

这个数组会被初始化一次吗?

4 个答案:

答案 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]预初始化的方法,无论第一个初始值是什么。

静态存储的缺点是代码变得不可重入。将其作为参数传递将是更正确的解决方案。

相关问题