动态(不定长)数组初始化

1   普通数组

这里设置的是静态数组,静态数组的创建非常方便,使用完也无需释放,要引用也简单,但是创建后无法改变其大小是其致命弱点!

解决方法可使用动态数组,但动态数组就要注意了,对于动态数组,其创建麻烦,使用完必须由程序员自己释放,否则严重会引起内存泄露。不过动态数组使用非常灵活,能根据程序需要动态分配大小。

动态数组的建立依赖于malloc函数,

要包含头文件 #include<malloc.h>
例如:只要int *p,使用时p = (int *)malloc(n*sizeof(int));这就相当于 int p[n];注意了,这里的n就可以使变量了!因为它是可变的,所以称为动态数组!

 

int** Input_data(){
    int **a;
    scanf_s("%d%d", &m, &n);
    a= (int**)malloc(m*sizeof(int*)); //第一维
    for (int i = 0; i<m; i++)
    {
        a[i] = (int*)malloc(n* sizeof(int));//第二维
        for (int j = 0; j<n; j++)
        {
            scanf_s("%d", &a[i][j]);

        }
    }
    return a;
}

 

2 结构体数组

 

typedef struct
{
    int x;
    int y;
}s;

s *dataOne=(s*)malloc(m*n*sizeof(s));    //定义结构体变量dataone数组(指针),数组大小是m*n
    int num=0;
        
        for (int i = 0; i < m; i++)
        {
            for (int j = 0; j < n; j++)
            {
                if (a[i][j] == 1)
                {
                    (dataOne+num)->x = i;   //结构体初始化,将数组内为1元素的下标写入结构体数组
                    (dataOne+num)->y= j;
                    num++;
                }
            }
        }

 

号外:c语言中还可以用void *calloc(size_t numElements,size_t sizeOfElement)来初始化,C++中可以直接用new初始化。

posted @ 2015-01-21 16:42  Daringoo  阅读(766)  评论(0编辑  收藏  举报