ramshadom
2016-05-26 08:36
采纳率: 71.4%
浏览 1.2k
已采纳

关于C++函数参数调用的问题

最近几天都在学习数据结构呀~学习的过程中发现一个小小的问题,虽然放置不管也没有什么关系……但是如果以后因为这些问题酿了大祸就不好了!所以借着这种未雨绸缪(伪)的精神,决定把问题po出来。

此前在下是查过书,查过百度谷歌的,但是找不到很满意的解答(大概是因为这个问题太具体了……),所以把琐碎问题在此提出来。能够回答这细枝末节的高手们,在下十分感激!



问题如下:

图片说明

如上图所示,我构建了一个结构体叫BiTNode,用来构建二叉树的节点的。接下来我也是在main函数里面使用了它说明了一个叫BiTree的变量,如下图所示
图片说明

之后我也在一个函数里调用了这个BiTree变量,就是下图这样
图片说明



之后我就开始学习图了,同样的,我构建了一个结构体,并且说明了一个变量叫G,还在一个函数里面调用了这个变量,po图!

图片说明

图片说明

图片说明



那么我的问题来了:为什么用同样方法构建结构体,同样方法说明变量,但是为什么在调用变量的时候,二叉树的就不用加指针说明符(就是那个星号),而图就需要呢?

图片说明
图片说明
以上,十分感谢。

---------------------------------问题补充--------------------------------------------
忘记说一些东西,导致回答我的大神的理解出现了偏差,很抱歉,现在补上。

图片说明
如果把图的函数的指针符号删去,编译器会出现这样的报错,我的疑问就是,为什么我调用变量G就一定得加指针符号呢?

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • 小灸舞 2016-05-26 09:41
    已采纳

    感觉楼主这个问题就是“值传递和指针传递的区别”
    1. 值传递:形参是实参的拷贝,改变形参的值并不会影响外部实参的值。从被调用函数的角度来说,值传递是单向的(实参->形参),参数的值只能传入,不能传出。当函数内部需要修改参数,并且不希望这个改变影响调用者时,采用值传递。
    2.指针传递一般适用于:函数内部修改参数并且希望改动影响调用者。对比值传递,指针传递可以将改变由形参“传给”实参(实际上就是直接在实参的内存上修改,不像值传递将实参的值拷贝到另外的内存地址中才修改)。
    指针传递的另外一种用法是:当一个函数实际需要返回多个值,而只能显式返回一个值时,可以将另外需要返回的变量以指针传递给函数,这样在函数内部修改并且返回后,调用者可以拿到被修改过后的变量,也相当于一个隐式的返回值传递吧。

    已采纳该答案
    打赏 评论
  • oyljerry 2016-05-26 08:42

    这个主要取决于你的两个函数分别是如何处理的,用不用星号是函数的参数以及它内部实现决定的。你要看看这两个函数的实现。

    打赏 评论

相关推荐 更多相似问题