user-0 提问: DEV C++支持动态数组吗？

回复:
user: user-1
content: 楼主是大几？？  建议先看一看变量在内存中的分配位置  不然你是搞不定动态数组的

user: user-0
content: 引用 6 楼 mujiok2003 的回复:In C++ and pre-C99 versions of C, an array's size must be a constant integral expression so that it can be calculated at compile-time. In C99, this restriction was relaxed. An array's size must be an integral expression, not necessarily a constant one. This allows you to declare a variable-length array or an array whose size is determined at runtime. For example:  void func(int sz)  {  int arr[sz]; // sz ins't const; allowed only in C99 } The size of arr may be different for every func() call. For example:  int main() {  int size;  printf("enter array's size : ");  scanf("%d", &size);  func(size); }这位朋友才提到问题的点子上，不像某些人只知道装！

user: user-0
content: 引用 10 楼 taodm 的回复:好吧，坚决地佩服你一下。传说中，C语言这把枪，很容易打到自己的脚。你中枪了。 补课C99以及数组越界吧。 [quote=引用 9 楼 lulutong_ 的回复:] [quote=引用 4 楼 movsd 的回复:] 这个不算动态数组，因为a的值已经定了，你试试  void fun(int a) { 	int b[a]; 	... }  int main() { 	fun(10); 	fun(20); }  int a = 10; int b[a]; a = 20; b[13]引用合法，说明b的范围变宽了，即动态加长了。[/quote][/quote]这段代码在DEV中编译通过并且成功运行。你可以先给a赋值，在0~a-1之间即为合法调用，怎么能说越界呢？a= 20,b[13]是合法的。动态数组即可以在运行过程中改变其长度的数组，这是我的理解。我知道一般都是用内存分配函数进行动态分配，但问题是在DEV中可以通过改变变量a的形式实现，这个不正是刚学C语言时候提到过的问题吗？ #include <stdio.h> #include <stdlib.h>  int main(int argc, char *argv[]) {     int a;     int b[a];      printf("a = ");     scanf("%d",&a);     printf("\nb[%d -1] = ",a);     scanf("%d",&b[a - 1]);     printf("\nb[%d - 1] = %d\n",a,b[a - 1]);       printf("a = ");     scanf("%d",&a);     printf("\nb[%d -1] = ",a);     scanf("%d",&b[a - 1]);     printf("\nb[%d - 1] = %d\n",a,b[a - 1]);    system("PAUSE");	   return 0; }

user: user-0
content: 引用 9 楼 lulutong_ 的回复:[quote=引用 4 楼 movsd 的回复:] 这个不算动态数组，因为a的值已经定了，你试试  void fun(int a) { 	int b[a]; 	... }  int main() { 	fun(10); 	fun(20); }  int a = 10; int b[a]; a = 20; b[13]引用合法，说明b的范围变宽了，即动态加长了。[/quote]#include <stdio.h> #include <stdlib.h>  int main(int argc, char *argv[]) {     int a;     int b[a];      printf("a = ");     scanf("%d",&a);     printf("\nb[%d -1] = ",a);     scanf("%d",&b[a - 1]);     printf("\nb[%d - 1] = %d\n",a,b[a - 1]);       printf("a = ");     scanf("%d",&a);     printf("\nb[%d -1] = ",a);     scanf("%d",&b[a - 1]);     printf("\nb[%d - 1] = %d\n",a,b[a - 1]);    system("PAUSE");	   return 0; }

user: user-2
content: 好吧，坚决地佩服你一下。传说中，C语言这把枪，很容易打到自己的脚。你中枪了。 补课C99以及数组越界吧。 引用 9 楼 lulutong_ 的回复:[quote=引用 4 楼 movsd 的回复:] 这个不算动态数组，因为a的值已经定了，你试试  void fun(int a) { 	int b[a]; 	... }  int main() { 	fun(10); 	fun(20); }  int a = 10; int b[a]; a = 20; b[13]引用合法，说明b的范围变宽了，即动态加长了。[/quote]

user: user-0
content: 引用 4 楼 movsd 的回复:这个不算动态数组，因为a的值已经定了，你试试  void fun(int a) { 	int b[a]; 	... }  int main() { 	fun(10); 	fun(20); }  int a = 10; int b[a]; a = 20; b[13]引用合法，说明b的范围变宽了，即动态加长了。

user: user-0
content: 引用 5 楼 derekrose 的回复:楼主 你认为什么叫动态数组   你这是动态的吗！！int b[a]，a是变量，用变量进行了数组界限的定义，变量的数值可以运行时改变，怎么不是动态数组？！事实，当取a=20是，对b[13]赋值也是合法的，并且可以正确输出，这难道不是典型的动态数组吗？

user: user-3
content: http://en.wikipedia.org/wiki/Variable-length_array

user: user-3
content: In C++ and pre-C99 versions of C, an array's size must be a constant integral expression so that it can be calculated at compile-time. In C99, this restriction was relaxed. An array's size must be an integral expression, not necessarily a constant one. This allows you to declare a variable-length array or an array whose size is determined at runtime. For example:  void func(int sz)  {  int arr[sz]; // sz ins't const; allowed only in C99 } The size of arr may be different for every func() call. For example:  int main() {  int size;  printf("enter array's size : ");  scanf("%d", &size);  func(size); }

user: user-1
content: 楼主 你认为什么叫动态数组   你这是动态的吗！！

user: user-4
content: 这个不算动态数组，因为a的值已经定了，你试试  void fun(int a) { 	int b[a]; 	... }  int main() { 	fun(10); 	fun(20); }

user: user-5
content: http://www.microsoft.com/visualstudio/chs/downloads#d-2010-express 点开Visual C++ 2010 Express下面的语言选‘简体中文’，再点立即安装

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步对应汇编一行！  VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时候。 （Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。）  本人严重鄙视象DEV C++这种不能查看C/C++源代码对应汇编指令的IDE！VC倒是用了好几年，不过在win7系统上使用起来比较麻烦，VS又找不到破解版的，所以就选了这个DEV，这东东倒是蛮小巧的，17M，小巧程度跟TC有的拼。

user: user-5
content: 计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步对应汇编一行！  VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时候。 （Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。）  本人严重鄙视象DEV C++这种不能查看C/C++源代码对应汇编指令的IDE！