C语言中关于值传递、地址传递和引用传递的区别

大多数人都知道,使用值传递对形参的更改不会影响实参,但是地址传递和引用传递却会,
最经典的例子莫过于交换两个数字。
但是,为什么在使用值传递的时候,传递一个地址给行参依然没有影响到实参了,是因为改变只在函数内部,没有返回给调用函数吗?
比如,下面关于二叉树的建立和遍历

#include <iostream>
using namespace std;

#define none '#'        
typedef char TelemType; 

typedef struct Binode{
    TelemType data; // 数据域
    struct Binode *left,*right; // 左右孩子指针 
}Binode,* Bitree;
// 按先序输入建立二叉树 
int createBiTree(Bitree& T){  
    TelemType ch;
    scanf("%c",&ch);
    if(ch == none ) T = NULL; // 用#表示空节点
    else{
        T = new Binode;
        T->data = ch;
        createBiTree(T->left);  // 建立左子树
        createBiTree(T->right);  // 建立右子树 
    }
    return 1;   
}
// 按照先序遍历二叉树 
int preOrder(Bitree T){
    if(T){
     printf("%c ",T->data); // 先遍历根
     preOrder(T->left);
     preOrder(T->right);
     return 1;
    } else return 0;
}
int main(){
    Bitree T;
    createBiTree(T);
    preOrder(T);

    return 0;
}

在建立二叉树createBitree去掉引用符号&,就建立不起来了?

传递指针的话,修改指针指向的变量会反应到实参
但是修改指针本身(将指针指向另一个地址),不会反应到实参
要修改指针本身,就要用两个指针或者用引用。
你可以把指针也看作是一个变量,它对应的是地址的值,相当于一个数,所以传指针本质还是传值(只是这个值不是一般的值,而是地址)