您好、欢迎来到现金彩票网!
当前位置:大发体育在线 > 值传 >

c语言函数参数传递的是值还是拷贝

发布时间:2019-07-25 21:55 来源:未知 编辑:admin

  今日在看c语言return的相关章节时,不明白return返回的是值还是值的考博,同时对函数形参传递的是值还是拷贝也不解?比如int*p(int*pA);这个函数声明,当主函数调用该函数时,传递给形...

  今日在看c语言return的相关章节时,不明白return返回的是值还是值的考博,同时对函数形参传递的是值还是拷贝也不解?比如int *p(int *pA);这个函数声明,当主函数调用该函数时,传递给形参pA的实参是一个指针还是该指针的拷贝呢?同理返回的函数P内部的指针还是那个待返回指针的拷贝呢??求帮助

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  1 所有的参数传递,都是传递值的拷贝。(如果想知道为什么,去学习编译原理的函数调用的参数压栈和出栈对应内容)。

  2 C传指针进去,其实也是把这个指针值按拷贝传送进去。但是因为指针值指向一块外部内存空间(其实更多是堆空间,或外层栈变量空间),所以感觉可以在函数里改变外部变量。其实本质还是按拷贝传递,只是传递进去的是一个访问变量的渠道。

  因此,如果我们希望函数内能改变外部的指针值,往往传进去的是指针变量的指针。呵呵,很多初学C的程序员,对**非常难理解。

  返回值是按拷贝传递,函数出栈后,会传出一个值,该值在调用函数的代码段的生命周期里一直有效。相当与调用点形成一个匿名的栈变量。

  其实function()执行结果自身就是一个匿名变量。(其实编译器会检查语法,如上面a=function这样的语法,匿名变量不会生成,直接使用a变量拷贝返回值)

  很明显function()必须有一个变量或常量参与计算,而函数里return的值会随函数调用结束出栈而被删除,所以必须拷贝构造传递出来。更多追问追答追问大虾,你好!你说的参数传递我看懂了。但是你说的返回值的这块不是很懂!比如说:int *p();{statements; return pA}这个函数,函数返回pA指针,但是它返回的到底是pA还是pA的一个副本或是其他的东西呢?追答传回的是int指针的拷贝。Pa的一个拷贝副本。

  pa和返回值都是指向的内存空间是在堆空间里,换句话说,指向函数空间外独立的空间。

  int x =function(); 函数调用完毕,函数里的a就不存在了。那x是什么?当然只能拷贝。

  function()+4; 函数调用完毕,函数里的a就不存在了。那什么在参与计算?当然只能拷贝。

  } 道理如上,a都不存在了,外面使用的是什么?追问哦,明白了,也就是说无论是形参传递还是return返回值,都会产生一个临时变量用来拷贝实参或者返回值,是吗?另外,大虾,你的这句话没看明白:变量a = function(); 而a并不等于函数里return的那个值。function的返回值是赋给a的,赋值后a应该是等于function的返回值吧??追答是值等于,但不是同一个内存空间代表的变量。

  展开全部在一个函数的内部,return的时候返回的都是一个拷贝,不管是变量、对象还是指针都是返回拷贝,但是这个拷贝是浅拷贝。

  int *p(int *pA); 这里是以一个指针作为形参,并返回一个指向int型的指针

  因此传递进去的是一个指针(即 地址),这个时候传递的不是参数的拷贝,经过这个函数处理后 可能会修改pA指向的数据,因此很多时候(尤其是字符串作为参数的时候)都会在形参之前添加const如下所示 int *p(const char *pA);这样可以防止pA所指向的数据不会被函数修改

  展开全部return是用来做函数返回值的(也就是说函数也是有其类型的),比如函数定义为int类型,则return返回的也是int型(不管你return后面跟的是什么类型,都要被强制转换为int型)。形参传递都是对实参值的拷贝,指针变量传递过去的是地址(也是拷贝哦,只不过是地址),然后在函数中通过地址直接操作地址中所保存的变量的值(相当于直接操作变量)来达到更改实参指针所指向的变量的值(有点拗,不懂可以联系我,慢慢讲解一下,指针是非常重要的哦)。接下来讲解一下int *p(int *pA);

  首先你定义的是一个指针函数(即该函数返回值是一个指针,并且是一个指向int类型的指针,也可以研究一下函数指针的作用哦),然后该函数的参数也是一个指向Int类型的指针变量。调用该函数时,传递给pA的是指针(指针的意思就是地址,指针变量是用来存放该地址的变量),也是实参指针变量的值的拷贝(明白了吧?^_^);接下来是返回值,从定义只能看出,其返回值为指向int类型的指针,而这个指针指向什么地址,就要看你的具体return返回值语句了。

  第二,pA不是形参,*pA才是,是一个整形的指针,其实就是一个指向一块物理地址的值

  第三,根据我个人的理解,主函数调用函数时传给子函数的变量,在“子函数中”是不会改变的,这大概就是你所谓的值吧(将实参的值赋给子函数的变量)

  第四,关于return返回的值在子函数执行完毕后是放在寄存器里的,当主函数要保存该值时就会申请变量存储这个值

  这些东西在操作系统里面讲的很清楚,我记得我们曾经学的是《unix操作系统教程》

  展开全部如果return值的话,就将值拷贝到cpu寄存器中,函数形参传递值的话是拷贝实参的,但函数结束后就释放拷贝的数据,被拷贝的还存在。

  int *p(int *pA);这个是在栈里开辟一块内存,该内存里拷贝了传递过来的地址,所以对该地址里的数据操作也就是对被传递的地址里的数据操作。

http://usdiclofenacs.com/zhichuan/299.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有