zoukankan      html  css  js  c++  java
  • (变长数组)变量也可做特殊数组的长度

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

    看一个例子:

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

  • 相关阅读:
    1、远程连接工具
    Restful架构API编码规范
    61、springmvc-异步请求-返回DeferredResult
    60、springmvc-异步请求-返回Callable
    59、servlet3.0-异步请求
    58、springmvc-定制与接管SpringMVC
    HTTP层 —— 响应
    HTTP层 —— 请求
    HTTP层 —— 控制器
    HTTP层 —— CSRF保护
  • 原文地址:https://www.cnblogs.com/melons/p/5791846.html
Copyright © 2011-2022 走看看