現象:調用 read_borrows_file() 後,主調函數的指針變量未被修改(仍為 NULL 或原值)。
void read_borrows_file(Node *head) { // 形參是一級指針
head = (Node*)malloc(sizeof(Node)); // 修改的是形參副本
// ...
}
int main() {
Node *head = NULL;
read_borrows_file(head); // 實參傳值,head 仍為 NULL
}
方法一:二級指針
void read_borrows_file(Node **head) {
*head = (Node*)malloc(sizeof(Node));
}
// 調用
read_borrows_file(&head);
方法二:返回指針(更推薦)
Node* read_borrows_file() {
Node *head = (Node*)malloc(sizeof(Node));
// ...
return head;
}
// 調用
Node *head = read_borrows_file();
C 語言參數傳遞是值傳遞。一級指針傳遞的是地址值的副本,函數內修改指針變量本身不影響外部;必須傳遞指針的地址(二級指針)或直接返回新指針。