c中的动态数组

时间:2011-01-27 20:24:35

标签: c pointers

我想在做一些计算之后在 C 中创建一个数组,请你帮我吗?

int len_arr = (sizeof inputs)/(sizeof inputs[0]);
int half_arr = len_arr / 2;
if(len_arr%2 != 0)
    half_arr++;

int m[half_arr][half_arr];

3 个答案:

答案 0 :(得分:4)

我假设你想创建一个行/列大小为half_arr的矩阵。

int i;
int len_arr = (sizeof inputs)/(sizeof inputs[0]); 
int half_arr = len_arr / 2; 
if(len_arr%2 != 0)     
    half_arr++;  

int **m = malloc(half_arr * sizeof(int));

for (i = 0; i < half_arr; i++)
    *m = malloc(half_arr * sizeof(int));

然后,您应该可以使用mm[row][column]访问m[column][row]

答案 1 :(得分:2)

您需要使用malloc来分配您的二维数组。

请查看此LINK以获得更好的解释。


修改

从给定链接的代码开始,我编写了一段应该可行的代码。

与詹姆斯的代码存在一些差异:

  • 代码块顶部的m声明
  • 从malloc(void *)的返回类型转换为正确的
  • 最后的内存释放
  • 这是一个完整的代码,必须工作:P

#include <stdlib.h>

int main ()
{

    // just an example of inputs...
    int inputs[3][7];

    // your code
    int i;
    int **m;
    int len_arr = (sizeof inputs)/(sizeof inputs[0]); 
    int half_arr = len_arr / 2; 
    if(len_arr%2 != 0)     
        half_arr++;  

    // allocation of the array
    m = (int **)malloc(half_arr * sizeof(int *));
    for(i = 0; i < half_arr; i++)
        m[i] = (int *)malloc(half_arr * sizeof(int));

    // use the array as you like...
    // ...

    // let's release the allocated memory properly
    for(i = 0; i < half_arr; i++)
        free(m[i]);
    free(m);

}

答案 2 :(得分:-1)

您的代码有效C99。您可能希望使用支持C语言的较新版本的编译器。

在Windows上,我会使用MinGW edition of gcc。如果你坚持使用MSVC,我建议使用C ++:标准的容器类型会让你的生活更轻松。