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

C 語言二叉樹創建:指針傳遞與雙重指針區別

     編輯:程式設計疑難解答

正確代碼(雙重指針)

void create(BiTree *T) {
    char ch;
    scanf("%c", &ch);
    if(ch == '#') *T = NULL;
    else {
        *T = (BiTree)malloc(sizeof(BiNode));
        if(*T) {
            (*T)->data = ch;
            create(&(*T)->lchild);
            create(&(*T)->rchild);
        }
    }
}

錯誤代碼(單指針)

void create(BiTree T) { // T 為值傳遞
    ...
    T = (BiTree)malloc(...); // 修改的是副本
    create(T->lchild); // 傳遞未初始化的指針
}

核心區別

  • BiTree *T(或 BiTree &T):傳遞指針地址,函數內修改 *T 影響外部實參。
  • BiTree T:值傳遞,函數內 T 為副本,分配內存、賦值均不影響調用者變量。

此為 C 語言指針核心概念:「若需在函數內修改指針本身(指向新內存),必須傳遞指針的指針或引用」。

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