代码之家  ›  专栏  ›  技术社区  ›  Ashley

C中用户定义的数组大小

  •  4
  • Ashley  · 技术社区  · 15 年前

    我正在读“插图C”,第一个练习题是:

    下面是我到目前为止提出的代码。不过,我了解到所有属性都需要在main函数之前声明。那么,如何获得自定义大小的数组而不在main函数中声明它们呢?

    #define _CRT_SECURE_NO_DEPRECATE
    #include <stdio.h>
    
    int n, m, i, j, k;
    
    int main(void)
    {
        printf("\nEnter:rows for A, columns for A and rows for B, columns for B\n");
        scanf("%i %i %i", &i, &j, &k);
        float A[i][j], B[j][k], C[i][k];    //Not legal, right?
    
        /*Read in A array*/
        for(n=0; n<i; ++n)
            for(m=0; m<j; ++m)
                scanf("%f", &A[n][m]);
    
        /*Read in B array*/
        for(n=0; n<j; ++n)
            for(m=0; m<k; ++m)
                scanf("%f", &B[n][m]);
    
        /*Calculate C array*/
        for(j=0; j<i; ++j)
            for(i=0; i<k; ++i)
            {
                C[i][j] = 0;
                for (k=0; k<j; ++k)
                    C[i][j] += A[i][k] * B[k][j];
            }
        for(n=0; n<i; ++n)
             for(m=0; m<k; ++m)
            printf("\n%.2f\t", C[n][m]);
    
        return 0;
    }
    
    2 回复  |  直到 15 年前
        1
  •  6
  •   Prasoon Saurav    15 年前

    您的问题已被标记 C VLAs 是C99的一部分,所以 float A[i][j], B[j][k], C[i][k]; 是合法的。

    编辑

    如果您的编译器不支持C99,那么您除了 dynamic memory allocation .

    例子:

      float **A;
      int l;
      A= (float**)malloc(i*sizeof(float*));
      for(l=0;l<i;++l)
         A[l]= (float*)malloc(j*sizeof(float));
    

    注意 别忘了 free 完成后的记忆

        2
  •  3
  •   Santa    15 年前

    您可能需要分配内存来动态存储数组。沿着以下路线的某处:

    float *a;
    int siz;    /* store user input here */
    
    /* <snip> */
    
    /* allocate a float array with `siz` elements */
    a = (float *) malloc(sizeof(float) * siz);