很简单的一个C语言有关问题,

很简单的一个C语言问题,救命啊!!!
void main()
{  int N,i,j;
   scanf("%d",&N);
   int r_color[N]={0};
 
为什么这样会报错啊,我想先输入N,再定义一个数组并把N赋为数组的长度





------解决方案--------------------
 
int r_color[10] = { 0 };
...数组的长度是常量. 除非你用new出来

int* p_r_color = new int[n];
------解决方案--------------------
定义数组时,不能用变量和[]来指明数组的大小的,
按lz的意思,代码应该为:

int *r_color = (int *)malloc(N*sizeof(int));
memset(r_color, 0, N*sizeof(int));
------解决方案--------------------
声明数组长度用常量
------解决方案--------------------
你定义的静态数组 在编译的时候 就要决定在栈上分配多少内存 而你的N在运行时才确定 以上
------解决方案--------------------
C89不支持变长数组,在C99标准上才支持变长数组;
------解决方案--------------------
先弄懂:编译器,运行期。
------解决方案--------------------
先弄懂:编译期,运行期。
------解决方案--------------------
int r_color[N]={0};
写成int r_color[N]即可。
------解决方案--------------------
引用
int r_color[N]={0};
写成int r_color[N]即可。


定义完毕就进行初始化操作是个很好的习惯,多敲几个也累不死啊很简单的一个C语言有关问题,
------解决方案--------------------
我的理解是你在定义数组的时候 必须给数组定下分配多少空间 不能是一个变化的值。
要么就动态分配内存 malloc()
------解决方案--------------------
我的理解是你在定义数组的时候 必须给数组定下分配多少空间 不能是一个变化的值。
要么就动态分配内存 malloc()
------解决方案--------------------
引用:
int r_color[N]={0};
写成int r_color[N]即可。

当你将N作为参数的时候,是无法进行初始化的,尤其是用在函数里。
------解决方案--------------------

int N, *color;
if (1 == scanf("%d", &N) && N > 0)
{
   color = (int*)calloc(N,sizeof(int));
}

------解决方案--------------------
其实你想用变长数组吗
------解决方案--------------------
可以定义指针数组来分配二维数组:
int a;
int (*)p[2];
a=p[2][N];
------解决方案--------------------
说错了 ,是数组指针来分配二维数组
------解决方案--------------------
int a;
int(*p)[2];
a=p[0][N];
------解决方案--------------------
先弄懂:编译器,运行期。