今日在看c语言return的相关章节时,不明白return返回的是值还是值的考博,同时对函数形参传递的是值还是拷贝也不解?比如int *p(int *pA);这个函数声明,当主函数调用该函数时,传递给形参pA的实参是一个指针还是该指针的拷贝呢?同理返回的函数P内部的指针还是那个待返回指针的拷贝呢??求帮助
大虾,你好!你说的参数传递我看懂了。但是你说的返回值的这块不是很懂!比如说:int *p();{statements; return pA}这个函数,函数返回pA指针,但是它返回的到底是pA还是pA的一个副本或是其他的东西呢?
追答传回的是int指针的拷贝。Pa的一个拷贝副本。
pa和返回值都是指向的内存空间是在堆空间里,换句话说,指向函数空间外独立的空间。
所以感觉把值传递出来了。
但这个感觉是错误的。
传递出来的是这块int指针的拷贝。本质上还是按拷贝传递。
本质上和参数传递进去变量指针是一个道理。
我可以给你举个例子:
1 变量:
int function(){
int a;
return a;
}
int x =function(); 函数调用完毕,函数里的a就不存在了。那x是什么?当然只能拷贝。
function()+4; 函数调用完毕,函数里的a就不存在了。那什么在参与计算?当然只能拷贝。
2 指针
int* function(){
int* a;
return a;
} //道理如上,a都不存在了,外面使用的是什么?
哦,明白了,也就是说无论是形参传递还是return返回值,都会产生一个临时变量用来拷贝实参或者返回值,是吗?另外,大虾,你的这句话没看明白:变量a = function(); 而a并不等于函数里return的那个值。function的返回值是赋给a的,赋值后a应该是等于function的返回值吧??
追答是值等于,但不是同一个内存空间代表的变量。
就是说虽然值相等,但不是一个东西。
C语言中函数参数的传递有两种方式:传值与传地址。
传值就是将实参的值传递给形参,使得形参的值与实参一样。
传地址就是将实参所在内存单元的地址传递给形参,使得形参指向实参所在的内存地址。
举例说明如下:
#include<stdio.h>