(变长数组)变量也可做特殊数组的长度
这个问题困扰我好久,终于完美区分:
看一个例子:
main()
{
int n=10;
int a[n];
scanf("%d",&a[2]);
printf("%d",a[2]);
system("pause");
}
以上例子中,n明显是一个整型的变量,虽然付了值,但是他仍然不可做为数组的大小,按理说是编译不通过的,但有些编译器,却让着个编译过了,
我们说:因为定义数组时,分配空间是需要一个固定的值,来确定你所申请的空间的大小。
若int n = 9 int a[n],但是那个n始终是个变量,若n的值改变,则数组大小也会改变,在对其使用的时候
就会使用到数组以外的内容,对程序会造成隐患,基本是不会让你编译通过的。所以,只能固定的申请a[9],像这类情况,数组的长度一定为常量;
但是
问题来了,今天我还就想用变量做数组的长度,就是有这样的情况啊,比如说,一个函数,功能树返回一个数组中的最大值,然后函数的返回值要做一个数组的长度
瞎了,怎么办?
方法一:
C/C++中用 malloc 或者 new 来给你要使用的数组开辟空间,就开一个变量大小:如下代码:
#include <stdlib.h>
int main(void)
{
int *a;
int n,i;
scanf("%d",&n);
a=malloc(sizeof(int)*n);
for (i=0;i<n;i++)
a[i]=i;
free(a);/*释放malloc()分配的空间*/
return 0;
}
这时候的变量n就可以做数组的的长度了,哈哈,当然 new 也是可以的,都是以堆上开辟空间的方法。
方法二:
C++中可以用容器:vector类。
例子:用的也比较多,就不在闲扯:
#include<iostream>
#include<vector>
using namespace std;
int main()
{
int len;
cin>>len;
vector<int> array(len); //声明变长数组(变量len)
for(int i=0;i<len;i++)
{
array[i]=i;
cout<<array[i]<<" ";
}
return 0;
}
赐教!