使用双指针参数传递

在C++中作为函数传递有值传递和地址传递两种。我们一般知道要将一个变量传入函数并希望变量值能发生改变,必须使用地址穿传递,将指向该变量的指针传入。
int num = 1;
int* p = #
void func(int* p)
{
    *p = 3;
}
func(p);
cout << num;    //3
同样如果是一个指针变量,想要改变它的值也要传入他的指针,才能能够发生值的改变,对于双指针的函数参数一般用于链表创建,二叉树创建等函数,用于返回链表头指针或者二叉树头节点等。以下是是创建二叉树:
typedef struct tn{
    int data;
    struct tn* LChild;
    struct tn* RChild;
}TreeNode;
//visit()为访问函数
int initTree(TreeNode** T)
{
    char c;
    TreeNode** p = T;
    if ((c = getchar()) == '\n')
        c = getchar();
    if (c == '#')
        *p = NULL;
    else
    {
        (*p) = (TreeNode*)malloc(sizeof(TreeNode));
        if (!*p) 
        {
         printf("malloc failed"); 
         return 0; 
         }
        (*p)->data = c;
        initTree(&(*p)->LChild);
        initTree(&(*p)->RChild);
    }
    return 1;
}
在函数体内涉及到对指针变量值改变的都要用双指针参数,如:
malloc()分配内存等对指针变量重新赋值的。
int* func(int**p)
{
    int a[] = { 1, 2, 3, 4, 5, 6 };
    p = a;
    return p;
}
int**num;
func(num);

对于&运算:
当&和变量类型连用时被称为引用,也就是该变量是另一变量的别名。如:

int a=3;
int &b=a;//b就是a的引用
void func(int &c){c+=1;}
//将a传入,那么变量a的值就会发生改变。

当&与变量名连用时时取地址运算。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值