在函数中传递变量的指针和引用/地址

Posted

技术标签:

【中文标题】在函数中传递变量的指针和引用/地址【英文标题】:passing pointers and reference/address of variables in functions 【发布时间】:2018-11-27 15:16:30 【问题描述】:

我想知道以下两个函数的区别

void fun1(vector<int>&v)  
v.push(1);  
fun1(v);  




void fun2(int *sum) 

 x=2;
 new_sum=*sum+x;
 fun2(&new_sum);

我无法理解差异。在第一个函数中,函数声明使用了指针,函数体中的其他位置没有“&”符号。 在函数 2 中,函数声明在地址指针处具有值,函数体具有“&”。请解释

就像在下面的函数中我们使用 &diagonalsum 来传递 map 为什么使用它?

void diagonalSumUtil(struct Node* root,
            int vd, map<int, int> &diagonalSum)

   if(!root)
    return;

diagonalSum[vd] += root->data;

// increase the vertical distance if left child
diagonalSumUtil(root->left, vd + 1, diagonalSum);

// vertical distance remains same for right child
diagonalSumUtil(root->right, vd, diagonalSum);

【问题讨论】:

c 没有引用,你的代码中也没有函数指针 fun2 永远不会停止递归。 @FrançoisAndrieux 从技术上讲 fun2 永远不会启动,因为它无法编译 ;) 你错了。第一个示例没有使用指针。在 c++ 中,同一个符号可以有不同的含义,这取决于它的使用位置。在这种情况下,&amp; 表示 reference。 您需要阅读指针和基础知识,this might help 【参考方案1】:

声明中的和号 (&) 声明了一个引用类型,而不是一个指针。

表达式中的和号 (&) 是 地址 运算符,它产生一个指针。

仅仅因为相同的标记在语言中用于两个不同的事物并不意味着它们是相关的事物。不幸的是,尤其是对于学习者。

【讨论】:

以上是关于在函数中传递变量的指针和引用/地址的主要内容,如果未能解决你的问题,请参考以下文章

1. 指针和引用

传入参数 指针 引用和 什么都不加的区别

C++中值传递指针传递引用传递的总结

10. 第 10 章 指针

什么情况下使用指针的引用

将c ++引用的地址传递给指针