Wayward:) 2019-03-10 14:19 采纳率: 50%
浏览 1678
已采纳

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去掉引用符号&,就建立不起来了?

  • 写回答

1条回答 默认 最新

  • threenewbee 2019-03-10 14:23
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用