据我了解,当我们定义像const char argv[SIZE];
这样的数组时,“SIZE”必须是编译时已知的数字。
但是最近我读了AOSP代码,发现了这个:http://androidxref.com/5.1.1_r6/xref/system/netd/server/NetdConstants.cpp#70
static int execIptables(IptablesTarget target, bool silent, va_list args) {
/* Read arguments from incoming va_list; we expect the list to be NULL terminated. */
std::list<const char*> argsList;
argsList.push_back(NULL);
const char* arg;
do {
arg = va_arg(args, const char *);
argsList.push_back(arg);
} while (arg);
int i = 0;
const char* argv[argsList.size()];
...
似乎const char* argv[argsList.size()];
使用的大小仅在运行时已知。这是因为这个数组是在一个函数中定义的,它会在堆栈中分配数组,还是因为编译器可以在编译时找出大小是多少?
答案 0 :(得分:0)
正确的术语是可变长度数组(VLA)。
C ++语言标准不支持此功能。
C语言标准在某些时候开始支持它。
内存中的分配依赖于编译器(即,不受标准规定)。