如:
int a[n];
int n;
scanf("%d",n);
当用户输入n的值后,便确定了整个数组的长度了。
但是上述方法,不被编译器认可!
请各位大虾帮忙!
在此谢过!
36 个解决方案
#1
int a[n];
int n;
scanf("%d",n);
改为:
int n ,*a;
scanf("%d",&n);
a = (int *) malloc(sizeof(int)*n);
int n;
scanf("%d",n);
改为:
int n ,*a;
scanf("%d",&n);
a = (int *) malloc(sizeof(int)*n);
#2
数组的长度不可以是变量。那样的话,执行到这个函数的时候,编译器就不知道栈指针该增长多少。
不过上次看到有人讨论说据说C语言的最新标准支持动态数组大小,没试过。
不过上次看到有人讨论说据说C语言的最新标准支持动态数组大小,没试过。
#3
malloc / free
(or calloc)
(or calloc)
#4
还是用C++好啊 嘿嘿
#5
二楼的方法.
#6
动态内存分配就可以了.
不过表要忘记最后要delete啊.
不过表要忘记最后要delete啊.
#7
楼主的要求c99标准已经支持了,下载一个新的gcc版本吧。
#8
C99是支持动态数组了,
不过还是用malloc动态分配比较好。
不过还是用malloc动态分配比较好。
#9
同意楼上的,C99已经支持动态数组了,
楼主,可以看看C语言大全,这本书上面说的十分清楚
楼主,可以看看C语言大全,这本书上面说的十分清楚
#10
不知道是楼主要的不:
这是动态二维数组的定义
int nRow = 5; //nRow是二维数组的行
int nList = 10; //nList是列
char * *pszFileName;
pszFileName = (char * *)malloc( nRow * sizeof(char *));
for(int i = 0; i < nList; i++){
pszFileName[i] = (char *)malloc(nList * sizeof(char));
}
注意:因为是动态的所以pszFileName[0]+1是得不到pszFileName[1]的地址.
这是动态二维数组的定义
int nRow = 5; //nRow是二维数组的行
int nList = 10; //nList是列
char * *pszFileName;
pszFileName = (char * *)malloc( nRow * sizeof(char *));
for(int i = 0; i < nList; i++){
pszFileName[i] = (char *)malloc(nList * sizeof(char));
}
注意:因为是动态的所以pszFileName[0]+1是得不到pszFileName[1]的地址.
#11
直接用 T *a类似形式就可以了,T为编译器支持的数据型别。记得用的时候malloc内存空间即可。
#12
可以通过malloc和remalloc函数实现无限内存调用的! 具体你可以查看下函数的用法,很简单的。
#13
int m,n;
cin>>m>>n;
double **b = new double* [m];
for(i = 0; i < m; i++)
b[i] = new double[n];
这...
cin>>m>>n;
double **b = new double* [m];
for(i = 0; i < m; i++)
b[i] = new double[n];
这...
#14
#15
mark
#16
C里面没有什么好的方法,用C++把,还有MALLOC之后的内存,注意FREE
#17
动态内存分配吧,就是要注意释放噢
#18
GCC和vc好象都支持变长数组,在forte c中不支持变长数组!
具体的用法:type p[0];就可以了
具体的用法:type p[0];就可以了
#19
TC2.0和3.0中不存在动态数组这一名称,只有通过动态分配内存来实现。想要动态数组,还是到C++里面吧!
#20
用个STL的容器多好。
#21
用malloc可实现动态分配,引用也可用数组形式.
#22
不太清楚现在能不能用动态的数组,最好还是用malloc开辟动态存储区吧。用指针。
#23
int temp;
scanf("%d",temp);
const int n=temp;
int array[n];
#24
不好意思,上面的不行
#25
数组的长度应该就是常量,不能是变量,所以在C语言里不能定义动态数组。
#26
C99标准中有变长数组,但是有的编译器不支持
#27
数组定义错误,定义的数组长度应该是固定值。
动态叔祖的定义可以这样:
int *a;
int n;
scanf("%d",n);
a=(int *)malloc(n,1);
这样定义的a就可以实现动态叔祖了。
例如*(a+i)=100;
动态叔祖的定义可以这样:
int *a;
int n;
scanf("%d",n);
a=(int *)malloc(n,1);
这样定义的a就可以实现动态叔祖了。
例如*(a+i)=100;
#28
要使用calloc,不是malloc,着两个函数的用法是有很大区别的
#29
C99是支持动态数组了,
不过还是用malloc动态分配比较好。
不过还是用malloc动态分配比较好。
#30
建议你看一本书:<<数值算法c语言版>>
具体的就不记得了
具体的就不记得了
#31
mark
#32
最好是malloc,这样也比较直观。
C++里面就用new吧。
C++里面就用new吧。
#33
二楼方法
#34
用c++的STL多方便
#35
可以先用预处理命令定义一个数组大小,然后就用malloc函数分配动态存储空间.就可以解决动态数组的问题了.
#36
malloc分配的是不连续的
calloc分配的是连续的一段地址
calloc分配的是连续的一段地址
#1
int a[n];
int n;
scanf("%d",n);
改为:
int n ,*a;
scanf("%d",&n);
a = (int *) malloc(sizeof(int)*n);
int n;
scanf("%d",n);
改为:
int n ,*a;
scanf("%d",&n);
a = (int *) malloc(sizeof(int)*n);
#2
数组的长度不可以是变量。那样的话,执行到这个函数的时候,编译器就不知道栈指针该增长多少。
不过上次看到有人讨论说据说C语言的最新标准支持动态数组大小,没试过。
不过上次看到有人讨论说据说C语言的最新标准支持动态数组大小,没试过。
#3
malloc / free
(or calloc)
(or calloc)
#4
还是用C++好啊 嘿嘿
#5
二楼的方法.
#6
动态内存分配就可以了.
不过表要忘记最后要delete啊.
不过表要忘记最后要delete啊.
#7
楼主的要求c99标准已经支持了,下载一个新的gcc版本吧。
#8
C99是支持动态数组了,
不过还是用malloc动态分配比较好。
不过还是用malloc动态分配比较好。
#9
同意楼上的,C99已经支持动态数组了,
楼主,可以看看C语言大全,这本书上面说的十分清楚
楼主,可以看看C语言大全,这本书上面说的十分清楚
#10
不知道是楼主要的不:
这是动态二维数组的定义
int nRow = 5; //nRow是二维数组的行
int nList = 10; //nList是列
char * *pszFileName;
pszFileName = (char * *)malloc( nRow * sizeof(char *));
for(int i = 0; i < nList; i++){
pszFileName[i] = (char *)malloc(nList * sizeof(char));
}
注意:因为是动态的所以pszFileName[0]+1是得不到pszFileName[1]的地址.
这是动态二维数组的定义
int nRow = 5; //nRow是二维数组的行
int nList = 10; //nList是列
char * *pszFileName;
pszFileName = (char * *)malloc( nRow * sizeof(char *));
for(int i = 0; i < nList; i++){
pszFileName[i] = (char *)malloc(nList * sizeof(char));
}
注意:因为是动态的所以pszFileName[0]+1是得不到pszFileName[1]的地址.
#11
直接用 T *a类似形式就可以了,T为编译器支持的数据型别。记得用的时候malloc内存空间即可。
#12
可以通过malloc和remalloc函数实现无限内存调用的! 具体你可以查看下函数的用法,很简单的。
#13
int m,n;
cin>>m>>n;
double **b = new double* [m];
for(i = 0; i < m; i++)
b[i] = new double[n];
这...
cin>>m>>n;
double **b = new double* [m];
for(i = 0; i < m; i++)
b[i] = new double[n];
这...
#14
#15
mark
#16
C里面没有什么好的方法,用C++把,还有MALLOC之后的内存,注意FREE
#17
动态内存分配吧,就是要注意释放噢
#18
GCC和vc好象都支持变长数组,在forte c中不支持变长数组!
具体的用法:type p[0];就可以了
具体的用法:type p[0];就可以了
#19
TC2.0和3.0中不存在动态数组这一名称,只有通过动态分配内存来实现。想要动态数组,还是到C++里面吧!
#20
用个STL的容器多好。
#21
用malloc可实现动态分配,引用也可用数组形式.
#22
不太清楚现在能不能用动态的数组,最好还是用malloc开辟动态存储区吧。用指针。
#23
int temp;
scanf("%d",temp);
const int n=temp;
int array[n];
#24
不好意思,上面的不行
#25
数组的长度应该就是常量,不能是变量,所以在C语言里不能定义动态数组。
#26
C99标准中有变长数组,但是有的编译器不支持
#27
数组定义错误,定义的数组长度应该是固定值。
动态叔祖的定义可以这样:
int *a;
int n;
scanf("%d",n);
a=(int *)malloc(n,1);
这样定义的a就可以实现动态叔祖了。
例如*(a+i)=100;
动态叔祖的定义可以这样:
int *a;
int n;
scanf("%d",n);
a=(int *)malloc(n,1);
这样定义的a就可以实现动态叔祖了。
例如*(a+i)=100;
#28
要使用calloc,不是malloc,着两个函数的用法是有很大区别的
#29
C99是支持动态数组了,
不过还是用malloc动态分配比较好。
不过还是用malloc动态分配比较好。
#30
建议你看一本书:<<数值算法c语言版>>
具体的就不记得了
具体的就不记得了
#31
mark
#32
最好是malloc,这样也比较直观。
C++里面就用new吧。
C++里面就用new吧。
#33
二楼方法
#34
用c++的STL多方便
#35
可以先用预处理命令定义一个数组大小,然后就用malloc函数分配动态存储空间.就可以解决动态数组的问题了.
#36
malloc分配的是不连续的
calloc分配的是连续的一段地址
calloc分配的是连续的一段地址