首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C 語言結構體指針函數無法返回地址:參數傳遞層級錯誤

     編輯:程式設計疑難解答

現象:調用 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 語言參數傳遞是值傳遞。一級指針傳遞的是地址值的副本,函數內修改指針變量本身不影響外部;必須傳遞指針的地址(二級指針)或直接返回新指針。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved