user-0 提问: 很简单的一个C语言问题，救命啊！！！

回复:
user: user-1
content: 先弄懂：编译器，运行期。

user: user-2
content: 我的理解是你在定义数组的时候 必须给数组定下分配多少空间 不能是一个变化的值。 要么就动态分配内存 malloc（）

user: user-2
content: 我的理解是你在定义数组的时候 必须给数组定下分配多少空间 不能是一个变化的值。 要么就动态分配内存 malloc（）

user: user-3
content: 引用int r_color[N]={0}； 写成int r_color[N]即可。  定义完毕就进行初始化操作是个很好的习惯，多敲几个也累不死啊

user: user-4
content: int r_color[N]={0}； 写成int r_color[N]即可。

user: user-5
content: int a; int(*p)[2]; a=p[0][N];

user: user-5
content: 说错了 ，是数组指针来分配二维数组

user: user-5
content: 可以定义指针数组来分配二维数组： int a; int （*）p[2]; a=p[2][N];

user: user-6
content: 其实你想用变长数组吗

user: user-7
content: int N， *color; if (1 == scanf("%d", &N) && N > 0) {    color = (int*)calloc(N,sizeof(int)); }

user: user-4
content: 引用 12 楼 haibo521333 的回复:int r_color[N]={0}； 写成int r_color[N]即可。 当你将N作为参数的时候，是无法进行初始化的，尤其是用在函数里。

user: user-8
content: 先弄懂：编译期，运行期。

user: user-8
content: 先弄懂：编译器，运行期。

user: user-0
content: 看完网上的教程 我编写了下面的动态分配代码 不知道对不对 int i,j,N,*r_color,**metro;      scanf("%d",&N);     r_color=(int*)malloc(sizeof(int)*N); 	metro=(int**)malloc(sizeof(int)*N); 	  for(i=0;i<N;i++) 	  {   metro[i]=(int*)malloc(sizeof(int)*N);}

user: user-0
content: 那如何分配二维数组 #include<stdio.h> #include<stdlib.h> #include<malloc.h> void main() {    int i,j,N,*r_color=0,*metro=0;      scanf("%d",&N);     r_color=(int*)malloc(sizeof(int)*N); 	metro=(int*)malloc(sizeof(int)*N*N); 	for(i=0;i<N;i++) 		r_color[i]=0;     for(i=0;i<N;i++) 		for(j=0;j<N;j++)         scanf("%d",&metro[i][j]);         color(metro,r_color,20);    for(i=1;i<=20;i++)/*输出着色方案*/      printf("%3d",r_color[i]); }

user: user-9
content: C89不支持变长数组，在C99标准上才支持变长数组；

user: user-0
content: 只想把那个常量N被代替用scanf输入的任意变量...........不知道有没有这样命令

user: user-0
content: 原来是动态分配问题，有没有可以把变量转化为常量的啊，不想一改就改全部，因为动态分配不太会... #include<stdio.h> #define N 21 void main() {  int r_color[N]={0};    int i;    int metro[N][N]={{0},/*邻接矩阵*/                             {0,1,1,1,1,1,1},                             {0,1,1,1,1},                             {0,1,1,1,0,0,1},                             {0,1,1,0,1,1},                             {0,1,0,0,1,1,1,0,0,1,0,0,0,0,0,0,1},                             {0,1,0,1,0,1,1,1,1,1},                             {0,0,0,0,0,0,1,1,1},                             {0,0,0,0,0,0,1,1,1,1,0,0,1},                             {0,0,0,0,0,1,1,0,1,1,0,0,1,1,1,0,1},                             {0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1},                             {0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1},                             {0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,0,0,0,0,1,1},                             {0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1},                             {0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1},                             {0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1,1,0,1},                             {0,0,0,0,1,0,0,0,1,0,0,0,0,1,1,1,1},                             {0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1},                             {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1},                             {0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,1,1,1},                             {0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1}};         color(metro,r_color,20);    for(i=1;i<=20;i++)/*输出着色方案*/      printf("%3d",r_color[i]); } int color(int metro[N][N],int r_color[N],int sum) {    int i,j,k;    for(i=1;i<=sum;i++)/*检查所有城市*/      for(j=1;j<=4;j++)/*对每个城市尝试4种颜色的着色方案*/      {         r_color[i]=j;/*尝试着色*/         for(k=1;k<i;k++)/*检查是否与相邻城市颜色相同*/             if(metro[i][k]==1&&r_color[k]==r_color[i])                break;/*相同则跳出，此时有k<i，则下面条件不成立，继续尝试下一种颜色*/         if(k>=i)/*若不相同，则使用当前颜色，并检查下一个城市*/             break;      } }

user: user-10
content: 你定义的静态数组 在编译的时候 就要决定在栈上分配多少内存 而你的N在运行时才确定 以上

user: user-11
content: 声明数组长度用常量