不会申请空间,不会free,我这个错误的代码总是显示[ ],就是什么也不显示
/**
* Return an array of size *returnSize.
* Note: The returned array must be malloced, assume caller calls free().
*/
int* productExceptSelf(int* nums, int numsSize, int* returnSize) {
int front[numsSize];
int back[numsSize];
front[0]=1;
*returnSize=(int)malloc(numsSize*sizeof(int));
back[numsSize-1]=1;
for(int i=0;i<numsSize-1;i++){
front[i+1]=front[i]*nums[i];
}
for(int i=numsSize-1;i>0;i--){
back[i-1]=back[i]*nums[i];
}
for(int i=0;i<numsSize;i++){
returnSize[i]=front[i]*back[i];
}
return returnSize;
}
returnSize是指针,感觉应该定义一个数组存储结果,但是不知道应该返回returnSize还是数组
弄明白了 柏宁真好
形参*returnSize表示一个指针,传进来的是一个地址,我需要在这个地址指向的地方写上有多少个值(就是最终结果有多少个)
我还需要在子函数里面自己定义一个数组,用来存储front和back乘积后最终的结果,这个数组的大小就是returnSize里面的值
返回值时返回这个数组,因为returnSize已经定义了大小,地址指向的位置已经有数据了,就算子函数不返回returnSize,里面的值也已经被写入了
系统的主程序就知道从我返回的数组里面取多少值了
Get it!
实践出真知,柏宁说
int front[numsSize];
int back[numsSize];
这种是数组静态申请空间的意思,但是numsSize是变量,不能静态申请空间
动态申请空间的方法是
int *front;
front=(int *)malloc(numsSize*sizeof(nt));
申请个指针,然后动态申请空间,因为默认定义指向的数据是void类型,所以前面用(int *)强制转换成int
/**
* Return an array of size *returnSize.
* Note: The returned array must be malloced, assume caller calls free().
*/
int* productExceptSelf(int* nums, int numsSize, int* returnSize) {
*returnSize = numsSize;//指针指向的值的赋值方法
int *result;
int *front;
int *back;
result = (int *)malloc(numsSize*sizeof(int));
front = (int *)malloc(numsSize*sizeof(int));
back = (int *)malloc(numsSize*sizeof(int));
front[0] = 1;
back[numsSize-1] = 1;
for(int i=0;i<numsSize-1;i++){
front[i+1]=front[i]*nums[i];
}
for(int i=numsSize-1;i>0;i--){
back[i-1]=back[i]*nums[i];
}
for(int i=0;i<numsSize;i++){
result[i]=front[i]*back[i];
}
return result;
}
哈哈哈哈哈 仰天大笑出门去!!