函数内二级指针完成函数外定义指针赋值:
struct teacher{
int id;
char name[64];
};
int get_mem(struct teacher **tpp){
struct teacher *tp = NULL;
tp = (struct teacher*)malloc(sizeof(struct teacher));
if(tp == NULL){
return -1;
}
tp->id = 100;
strcpy(tp->name,"lisi");
*tpp = tp;
return 0;
}
int get_mem2(struct teacher* &tpp){
tpp = (struct teacher*)malloc(sizeof(struct teacher));
if(tpp == NULL){
return -1;
}
tpp->id = 1000;
strcpy(tpp->name,"wang5");
return 0;
}
void free_teacher(struct teacher **tpp){
if(tpp == NULL)
return;
struct teacher *tp = *tpp;
if(tp != NULL){
free(tp);
*tpp = NULL;
}
}
int main(void){
struct teacher *tp = NULL;
get_mem(&tp);
cout<<tp->id<<" "<<tp->name<<endl;
free_teacher(&tp);
return 0;
}
用指针引用实现函数外定义指针,在函数内对指针赋值:
struct teacher{
int id;
char name[64];
};
int get_mem2(struct teacher* &tpp){
tpp = (struct teacher*)malloc(sizeof(struct teacher));
if(tpp == NULL){
return -1;
}
tpp->id = 1000;
strcpy(tpp->name,"wang5");
return 0;
}
void free_teacher2(struct teacher* &tpp){
if(tpp != NULL){
free(tpp);
tpp = NULL;
}
}
int main(void){
struct teacher *tp = NULL;
get_mem2(tp);
cout<<tp->id<<" "<<tp->name<<endl;
free_teacher2(tp);
return 0;
}