网上摘的补充知识:C中malloc函数
malloc的全称是memory allocation,中文叫动态内存分配,当无法知道内存具体位置的时候,想要绑定真正的内存空间,就需要用到动态的分配内存。
malloc 向系统申请分配指定size个字节的内存空间(连续的一块内存)。返回类型是 void* 类型。void* 表示未确定类型的指针。
void 可以指向任何类型的数据,更明确的说是指申请内存空间时还不知道用户是用这段空间来存储什么类型的数据,C,C++规定,void 类型可以强制转换为任何其它类型的指针。
allocates a block of size bytes of memory, returning a pointer to the beginning of the block.
如果分配成功则返回指向被分配内存的指针(此存储区中的初始值不确定),否则返回空指针NULL。当内存不再使用时,应使用free()函数将内存块释放。函数返回的指针一定要适当对齐,使其可以用于任何数据对象。
比如想分配100个int类型的空间:int* p = (int *) malloc ( sizeof(int) * 100 ); //分配可以放得下100个整数的内存空间。
以下是借鉴代码
```cpp
int** groupThePeople(int* groupSizes, int groupSizesSize, int* returnSize, int** returnColumnSizes){
int **ret = NULL;
int tmp[500][500] = {0};
int tmpnum[500] = {0};
int i;
int k;
int n;
*returnSize = 0;
if (groupSizesSize == 0) {
return NULL;
}
for (i = 0; i < groupSizesSize; i++) {
k = groupSizes[i] - 1;
if (k < 0 || k >= 500) {
continue; // 异常保护
}
tmp[k][tmpnum[k]] = i;
tmpnum[k]++;
}
ret = malloc(sizeof(int *) * groupSizesSize);
(*returnColumnSizes) = malloc(sizeof(int) * groupSizesSize);
for (i = 0; i < 500; i++) {
n = 0;
while (tmpnum[i] > i) {
ret[*returnSize] = malloc(sizeof(int) *(i + 1));
(*returnColumnSizes)[*returnSize] = i + 1;
for (k = 0;k <= i; k++) {
ret[*returnSize][k] = tmp[i][n];
n++;
tmpnum[i]--;
}
(*returnSize)++;
}
}
return ret;
}
- List item
最令人拍案叫绝的便是malloc的运用可以解决我一直纠结的内数组内部个数问题
这整个流程反复进行数组套用,指针化用,对我这个小白起到了不小的作用。
略加调整,交了一下(整体把控需要复习)
(电脑版看着舒服哈哈哈)
另外的总结:
限制条件保护程序
NULL限制
建立辅助数组-num,-column等
数组嵌套
整个设计太巧妙了woc