动态(不定长)数组初始化
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初始化。