主函数中定义指针,子函数中分配内存
1、直观想到的就是子函数定义为返回指针类型。
int *subf(void){return malloc(sizeof(int)*10);}
int main(void){
int *p=subf();
free(p);
return 0;
}
2、这里要说的是主函数调用子函数时将定义好的指针地址传入子函数,子函数通过这个地址将申请的内存关联到这个指针。
void subf(int **pp){ //传入指针的地址也就是二级指针
*pp=malloc(sizeof(int)*3); //相当于主函数中的p=这里的malloc返回的指针
(*pp)[0]=22; //这个*pp就是主函数中的p 是数组的头指针,可以直接看成是数组名,所以可以(*pp)[0]这样用,因为*优先级低,所以要加括号
(*pp)[1]=33;
}
int main(void){
int *p=NULL;
subf(&p);
printf("%d\n",p[0]);
printf("%d\n",p[1]);
free(p);
return 0;
}