【发布时间】:2015-04-25 19:57:16
【问题描述】:
如果我有一个被多次调用的函数,并且该函数需要一个包含 16 个指针的数组,每次调用时都会使用新指针进行更新,那么这是声明该数组的正确方法吗?
char** readUserInput() {
static char* cmds[16];
...
}
这个数组会被初始化一次吗?
【问题讨论】:
-
只要不在声明时初始化数组,就运行时性能而言并没有真正的区别。如果数组是静态的,那么它在数据部分中分配。否则,它在堆栈中分配。但在任何一种情况下,分配(也称为“静态分配”,但不要将其与此处的关键字
static混淆)不会添加任何可执行代码,因此不会产生任何运行时影响。 -
如果你在声明时初始化数组AND它是非静态的,那么初始化代码会隐式添加到函数中,并且每次函数都会执行叫做。当然,这会影响运行时性能。
-
请注意,我上面提到的分配细节(数据部分与堆栈)不是由 C 语言标准规定的,而是取决于编译器实现(尽管我的每个编译器听说过以同样的方式实现它)。