动态数组

动态数组的优点:

传统数组(静态数组)是需要在程序运行前,就指定大小,比如说

int i = 10;
int a[i];

这种就是不合法的。
因为函数栈的要求,就是在函数运行前,分配好所有变量的空间,i是不定的,所以不能再运行前,就分配好空间。

但是大多数情况,我们并不能预先知道数组的大小的。
所以我们使用动态数组

int *a = new int[i];

这个语句就可以在执行的时候,才分配空间,是合法的。

同时,传统数组是存放在栈区的,栈区是有大小限制的,好像是2M吧。如果你申请了一个大于2M的数组,程序就会报错……

但是动态数组是在堆空间的,理论上,内存有多大,就可以申请多大的数组。2G总够用的了吧。

动态数组C++实现:
int main()
{
    int i = 10;
    int *a = new int[i];
    for (int j = 0; j < 10; j++)
        a[j] = j;
    for (int j = 0; j < 10; j++)
        cout << a[j] << " ";
    cout << endl;

    system("pause");
    return 0;
}
动态数组的C实现:

申请动态一维数组,只是这个一维数组中存储的是指针类型。
一维数组中的每个指针又可以动态分配一个一维数组,即最终可以形成一个二维数组。

int** array_init(unsigned int size)
{
    int **ppArray = NULL;
    if (0 == size)
    {
        return NULL;
    }

    ppArray = (int**)malloc(sizeof(int*) * size);
    if (ppArray == NULL)
    {
        return NULL;
    }
    memset(ppArray, 0, sizeof(int*) * size);

    return ppArray;
}

void use_array()
{
    int **ppArr = NULL;
    int i = 0;
    int size = 10;
    ppArr = array_init(size);

    int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    for (i = 0; i < 10; i++)
    {
        ppArr[i] = &array[i];
    }

    for (int i = 0; i < 10; i++)
    {
        printf("%d\n", *(int*)(ppArr[i]));
    }

}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值