#include <stdio.h>
#include <stdlib.h>
typedef struct {
char* data;
int capacity;
} SeqList;
int free_list1(SeqList *me) {
free(me);
me = NULL;
return 0;
}
int free_list2(SeqList** me) {
free(*me);
*me = NULL;
return 0;
}
int main(void) {
SeqList *demo = malloc(sizeof(SeqList));
demo->capacity = 10;
free_list1(demo);
//free_list2(&demo);
printf("%d\n",demo->capacity);
return 0;
}
在之前的学习中我们了解过值传递和地址传递的不同。但在此处,即使值传递情况下我们操作的是实参副本,但其指向仍是目标地址,free针对的正是目标地址,因此两种方式都可以实现free的效果,唯一的不同在于:
方式1采用值传递,所以 me = NULL 并没有改变实参指针的指向,而是改变了实参副本的指向。
方式2采用地址传递,所以 *me = NULL 可以修改指向,这两点与我们之前的学习是相符的。