定义不确定大小的数组
define array with unsure size
据我了解,当我们定义像 const char argv[SIZE];
这样的数组时,必须是编译时已知的数字。
但是最近我阅读了AOSP代码,并找到了以下内容:http://androidxref.com/5.1.1.r6/xref/system/netd/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()];
使用的大小仅在运行时已知。这是因为此数组是在将在堆栈中分配数组的函数中定义的,或者是因为编译器可以找出编译时大小的大小?
正确的术语是可变长度阵列(vla)。
C 语言标准不支持此功能。
C语言标准在某个时候开始支持它。
内存中的分配是编译器依赖性的(即,不是由标准决定)。
相关文章:
- 遍历并行数组以确定C++中的最大数字
- 具有随机数的二维数组不会更改
- C++ - 块不移动,我的数组不起作用
- 0 的 2D 数组 不相关循环的破坏逻辑 - C++
- 为什么数组不打印第一个元素?
- C++字符数组不接受超过 4 个字符的输入
- 如何从字符数组(不是字符串数组)中删除符号
- C++指针数组不会接受更多值
- 字符数组不起作用:C++
- 数组不保存初始化值
- Arduino 数组不命名类型
- 在 Qt 中解析嵌套的 JSON 时出现意外结果(数组不存在)
- 数组不会存储超出第一个空间的范围
- 为什么具有单独字符的字符数组不像字符串文字那样以 null 终止符结尾?
- 如果 2D 数组不是双指针,那么为什么会发生这种情况?
- 我的 c++ 程序中的字符数组不会打印任何内容
- 循环中的矢量到数组不起作用
- 由于某种原因,多维数组不会从函数中更改元素
- 如何以递归方式反转任何数组?(不使用C++标准库)
- Cuda 写入设备上的数组不会更改值