指针和malloc构建一个可变二维数组

来源:互联网 发布:淘宝代销上架编辑技巧 编辑:程序博客网 时间:2024/06/05 19:02

以前我一直觉得要指针干啥呢,要访问一块内存直接声明一个变量去访问不就完了。直到当我想实现一个可变二维数组才发现没法用直接声明的方式去实现。因为我不知道数组会有几行,每行有多少个元素。所以这个时候只能先声明一个二维指针,然后当知道了可变数组有几行,每行有几个元素之后,在用malloc或者free分配相应的内存。

下面的代码实现功能为:

输入:2     2

    3    1    5      4

    5     1     2      8      9     3

    0     1

    1     3

输出:5

    9

解读:读入第一行第一个数据为二维数组的行数,第二数据为要查询的数据个数。

            读入第二行第一个数据为这行有多少个元素,后面的数据这是这行的元素

    读入第三行同第二行一个个道理

            读入第四行第一个数据表示要读取数据的行数,第二个数表示要读取数据的列数

    读入第五行同第四行一个道理

#include <cstdio>#include <iostream>using namespace std;int main() {    /* Enter your code here. Read input from STDIN. Print output to STDOUT */       int n,q,h,g,i,j;    cin>>n>>q;    int *a[n];    int num[n];    for(h=0;h<n;h++)    {        cin>>num[h];        a[h]=(int*)malloc(sizeof(int)*num[h]);        for(g=0;g<num[h];g++)        {            cin>>a[h][g];        }            }    for(h=0;h<q;h++)    {        cin>>i>>j;        cout<<a[i][j]<<endl;    }    return 0;
        这里读取到二维数组的行数n后创建了一个有n个元素的指针数组(跟二维指针是类似的)。在了解每行有x个元素后,用malloc创建x*int大小的内存,内存的头部地址存入指针函数内。这样要访问内存中的元素时就可以用数组的方式进行访问了----a[ ][ ].。当然这是一个小练习就没有把malloc分配的内存用完后用free释放掉,在工作中的编程分配的内存一定要记得释放掉,防止发生内存泄漏的情况。

这个小练习让我加深理解了指针和malloc的用法。还记得以前看书上内存管理的部分时 ,得知声明定义一个变量同样是分配内存,当时就特别不理解为啥要多此一举搞一个malloc函数也来分配函数。做完上面的小练习就知道了动态分配内存还得靠malloc,而且用指针和malloc来分配内存可以使用循环来进行偷懒。不然声明变量的时候光敲那些变量名都够耗费时间的了。

原创粉丝点击