变长数组
C99中支持变长数组,即支持数组在定义时以一个变量来声明长度;
int i;
int n;
scanf("%d",&n);
int arrat[n]; //用 一个变量来声明数组长度
for(i=0;i<n;i++)
{
arrat[i]=i+1;
}
- 变长数组并不是所有编译器都支持的,部分支持C99的编译器也去掉了可变数组的功能
- 变长数组是在栈上进行分配的;动态内存分配是在堆上运行的;
int *pt= new int[num];把动态分配的内存区间首地址赋给pt。但是在后续对区间内容操作时,直接对pt 进行偏移(pt++),会出错。
解决办法:
(1) 再定义一个指针 int *p = pt,对p进行偏移;
(2) 采用数组形式 pt[i];