大学里有C课程,但现在几个小时的谷歌搜索都没有回答我的问题.

我知道在C中有编译时数组,比如:

#define N 2
#define M 3

int array[N][M] = { { 1, 2, 3 }, 
                    { 4, 5, 6 } };

此数组:

  1. 在内存中统一分配:LIKE
-------------
|1|2|3|4|5|6|
-------------
  1. 我可以简单地访问它:
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中实现我想要的东西的正确方法吗? 即:

  1. 2D+
  2. 使用非恒定大小动态分配
  3. 只使用一个malloc()而不是1 + N
  4. 访问语法为arr[i][j]

它是否可行?

推荐答案

你能给我一个提示,在C中实现我想要的东西的正确方法吗?即:

 1. 2d array
 2. Dynamically allocated using non-constant sizes
 3. Using only one malloc() instead of 1 + N
 4. Having access syntax as arr[i][j]

不幸的是,您使用的是不支持VLA的MS编译器,运气不佳.您需要解决办法.

  1. 仅作为指针数组或一维数组和宏或函数来访问元素
  2. 与p.1相同
  3. 仅作为1D数组
  4. 只作为指针array.

C++相关问答推荐

Apple Libm的罪恶功能

想了解 struct 指针和空指针转换

与unions 的未定义行为

C中出现分段错误后关闭文件

为什么在此程序中必须使用Volatile关键字?

为什么I2C会发送错误的数据?

模拟shell并运行.sh文件

struct 上的OpenMP缩减

整型文字后缀在左移中的用途

将 struct 传递给函数

如何读取程序中嵌入的数据S自己的ELF?

从C中的函数返回静态字符串是不是一种糟糕的做法?

如何在zOS上编译共享C库

如何摆脱-WIMPLICIT-Function-声明

try 查找带有指针的数组的最小值和最大值

传递给函数的 struct 中的数组

意外的C并集结果

在C中,为什么这个带有递增整数的main函数从不因溢出而崩溃?

使用共享变量同步多线程 C 中的函数

初始化动态分配的布尔二维数组的最佳方法是什么?