大学里有C课程,但现在几个小时的谷歌搜索都没有回答我的问题.
我知道在C中有编译时数组,比如:
#define N 2
#define M 3
int array[N][M] = { { 1, 2, 3 },
{ 4, 5, 6 } };
此数组:
- 在内存中统一分配:LIKE
-------------
|1|2|3|4|5|6|
-------------
- 我可以简单地访问它:
arr[i][j]
但如果我想要拥有类似的数组,但要动态调整大小呢?
我看了this answer个,这表明:
int main() {
int N, M;
scanf("%d %d", &N, &M);
int (*arr)[N] = malloc(sizeof(int[N][M]));
return 0;
}
这看起来就是我要搜索的内容,但我的Visual Studio拒绝编译它:
1>C:\Users\Name\VisualStudioProjects\lab2\lab2\lab51.c(18,26): error C2057: expected constant expression
1>C:\Users\Name\VisualStudioProjects\lab2\lab2\lab51.c(18,27): error C2466: cannot allocate an array of constant size 0
我试着将Project—Properties—General—C Language Standard设置为"ISO C11 Standard",但这并没有帮助.>>>
你能给我一个提示,在C中实现我想要的东西的正确方法吗? 即:
- 2D+
- 使用非恒定大小动态分配
- 只使用一个
malloc()
而不是1 + N
- 访问语法为
arr[i][j]
它是否可行?