(变长数组)变量也可做特殊数组的长度

这个问题困扰我好久,终于完美区分:

看一个例子:

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;
}
赐教!

posted @ 2016-05-09 00:31  云端止水  阅读(198)  评论(0编辑  收藏  举报