gpt4 book ai didi

c - 大小未知的可变长度数组

转载 作者:太空宇宙 更新时间:2023-11-04 02:27:46 24 4
gpt4 key购买 nike

在 C 中,由于我使用并通过编译器生成的框架,我需要使用全局可变长度数组。但是,直到运行时我才能知道它的维度大小(例如 argv )。为此,我想声明一个未知大小的全局可变长度数组,然后定义它的大小。

我是这样做的:

int (*a)[]; //global variable length array
int main(){
//defining it's size
a = (int(*)[2]) malloc(sizeof(int)*2*2);

for(int i=0;i<2; i++){
for(int j=0;j<2; j++){
a[i][j] = i*2 + j;
}
}
return 0;
}

但是,这不起作用:我得到了 invalid use of array with unspecified bounds 错误。我怀疑是因为即使定义了它的大小,它的原始类型也没有定义更大步幅的大小。

有人知道如何解决这个问题吗?使用 C99(没有 C++)并且它应该是非常标准的(至少在 gcc 和 icc 上工作)。

编辑:我可能忘记了一些重要的事情。我需要提出一个可通过“静态数组接口(interface)”使用的数组,我的意思是多个方括号(每个维度一个)。

最佳答案

首先a不是数组而是指向未指定长度数组的指针。你想做的事是不可能的。你不能有一个全局可变长度数组。
但是在目前的情况下,您可以使用它来访问分配给 a

的内存
for(int i=0;i<2; i++){
int *ptr = *a + 2*i;
for(int j=0;j<2; j++){
ptr[j] = i*2 + j;
}
}

关于c - 大小未知的可变长度数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48577614/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com