(变长数组)变量也可做特殊数组的长度
这个问题困扰我好久,终于完美区分:
看一个例子:
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; }赐教!