动态数组也叫数组的动态联编,有动态联编自然也有静态联编,静态联编就是数组的长度在编译时设置,而动态联编是在运行时才为数组分配空间,其长度在运行时设置,使用完这种动态数组后,应该释放内存。
静态联编:int arr[10]; //数组长度为一常量
动态数组在ISO C99后就有了新的规定(如下图文件):
这是部分说明,完整的说明在 ISO/IEC9899 标准的 6.7.5.2 Array declarators里可以看到,这个里面加入了可变长数组的相关规定。
#include <iostream> int main() { using namespace std; int len; cin>>len; int arr[len]; return 0; }
之前在网上看到好多人说上面这种写法是错误的,但我在gcc下编译并没有报错,这让我产生了疑惑,后来发现原来是知识有了更新,【ps:那可是99年发布的啊!!国内知识更新真慢。。。】
言归正传,虽然上面的一种申请动态数组的方法很简单,也很实用(因为它会自动释放内存),但这里还是不得不提提用指针的实现。
#include <iostream> int main() { using namespace std; int len; cin>>len; int *p = new int [len]; //动态申请 for(int i=0;i<len;i++) //输入 { cin>>p[i]; } for(int i=0;i<len;i++) //输出 { cout<<"p["<<i<<"]="<<p[i]<<endl; } delete [] p; //释放内存 return 0; }
这里只简单提提用指针创建动态数组的方法,如果要谈到数组与指针,恐怕我也说不清楚,至今也只知道二者的一些区别,至于更深层次的理解,还有待学习。
(更多关于变长数组的知识,请参考这位博友)
时间: 2024-10-23 03:27:57