user-0 提问: 萌新，请教一个问题。

回复:
user: user-1
content: 【code=c】将代码放在这里【/code】 以上【】用[]代替

user: user-2
content: 引用 6 楼 rongxin712 的回复:[quote=引用 3 楼 zhao4zhong1 的回复:] 仅供参考：  请问这是什么IDE ？[/quote]  应该是老赵一百年不动摇的VC6

user: user-0
content: 引用 3 楼 zhao4zhong1 的回复:仅供参考：#include <stdio.h> #include <stdlib.h> #include <malloc.h> int **newarr2d(int rows,int cols) {     int **p,i;      p=(int **)malloc(rows*sizeof(int *));     if (NULL==p) exit(1);     for (i=0;i<rows;i++) {         p[i]=(int *)malloc(cols*sizeof(int));         if (NULL==p[i]) exit(1);     }     return p; } void deletearr2d(int **p,int rows) {     int i;      for (i=0;i<rows;i++) {         free(p[i]);     }     free(p); } int main() {     int **arr2d,i,j,r,c;      r=4;     c=5;     //在堆中开辟一个4×5的二维int数组     arr2d=newarr2d(r,c);     for (i=0;i<r;i++) {         for (j=0;j<c;j++) {             arr2d[i][j]=i*c+j;         }     }     for (i=0;i<r;i++) {         for (j=0;j<c;j++) {             printf(" %2d",arr2d[i][j]);         }         printf("\n");     }     deletearr2d(arr2d,r);      r=6;     c=3;     //在堆中开辟一个6×3的二维int数组     arr2d=newarr2d(r,c);     for (i=0;i<r;i++) {         for (j=0;j<c;j++) {             arr2d[i][j]=i*c+j;         }     }     for (i=0;i<r;i++) {         for (j=0;j<c;j++) {             printf(" %2d",arr2d[i][j]);         }         printf("\n");     }     deletearr2d(arr2d,r);      return 0; } //  0  1  2  3  4 //  5  6  7  8  9 // 10 11 12 13 14 // 15 16 17 18 19 //  0  1  2 //  3  4  5 //  6  7  8 //  9 10 11 // 12 13 14 // 15 16 17 //   请问这是什么IDE ？

user: user-3
content: 引用 2 楼 rongxin712 的回复:[quote=引用 1 楼 cfjtaishan 的回复:] C 语言支持变长数组，这个支持变长应该是针对二维数组的行数可变，列数需要是固定的。 因此在定义二维数组作为形参时，需要确定列数，行数可以不用指定； 形参：int matrix[nRows][nCols];等价：int (*matrix)[nCols];因此需要固定行数nCols，建议将nCols定义成一个宏。   可能是vs2017 不支持这么写？[/quote] C语言不支持完全意义的变长数组，不过在C++里是支持的。

user: user-2
content: gcc作为c代码编译是可以的，基于clang/llvm的编译器，比如C++Builder也是可以通过的。

user: user-1
content: 仅供参考：#include <stdio.h> #include <stdlib.h> #include <malloc.h> int **newarr2d(int rows,int cols) {     int **p,i;      p=(int **)malloc(rows*sizeof(int *));     if (NULL==p) exit(1);     for (i=0;i<rows;i++) {         p[i]=(int *)malloc(cols*sizeof(int));         if (NULL==p[i]) exit(1);     }     return p; } void deletearr2d(int **p,int rows) {     int i;      for (i=0;i<rows;i++) {         free(p[i]);     }     free(p); } int main() {     int **arr2d,i,j,r,c;      r=4;     c=5;     //在堆中开辟一个4×5的二维int数组     arr2d=newarr2d(r,c);     for (i=0;i<r;i++) {         for (j=0;j<c;j++) {             arr2d[i][j]=i*c+j;         }     }     for (i=0;i<r;i++) {         for (j=0;j<c;j++) {             printf(" %2d",arr2d[i][j]);         }         printf("\n");     }     deletearr2d(arr2d,r);      r=6;     c=3;     //在堆中开辟一个6×3的二维int数组     arr2d=newarr2d(r,c);     for (i=0;i<r;i++) {         for (j=0;j<c;j++) {             arr2d[i][j]=i*c+j;         }     }     for (i=0;i<r;i++) {         for (j=0;j<c;j++) {             printf(" %2d",arr2d[i][j]);         }         printf("\n");     }     deletearr2d(arr2d,r);      return 0; } //  0  1  2  3  4 //  5  6  7  8  9 // 10 11 12 13 14 // 15 16 17 18 19 //  0  1  2 //  3  4  5 //  6  7  8 //  9 10 11 // 12 13 14 // 15 16 17 //

user: user-0
content: 引用 1 楼 cfjtaishan 的回复:C 语言支持变长数组，这个支持变长应该是针对二维数组的行数可变，列数需要是固定的。 因此在定义二维数组作为形参时，需要确定列数，行数可以不用指定； 形参：int matrix[nRows][nCols];等价：int (*matrix)[nCols];因此需要固定行数nCols，建议将nCols定义成一个宏。    可能是vs2017 不支持这么写？

user: user-3
content: C 语言支持变长数组，这个支持变长应该是针对二维数组的行数可变，列数需要是固定的。 因此在定义二维数组作为形参时，需要确定列数，行数可以不用指定； 形参：int matrix[nRows][nCols];等价：int (*matrix)[nCols];因此需要固定行数nCols，建议将nCols定义成一个宏。