大家好,今天小编关注到一个比较有意思的话题,就是关于c语言返回值返回到哪里的问题,于是小编就整理了3个相关介绍c语言返回值返回到哪里的解答,让我们一起看看吧。
- C语言中函数调用与返回值的关系是什么?
- C语言规定,函数返回值的类型是由( )。A. return语句中的表达式类型所决定B. 调用该函数时的主调函数类?
- 既然C语言函数的局部变量会被释放,那为什么函数还可以把它return返回呢?
C语言中函数调用与返回值的关系是什么?
所谓函数返回值是一个函数在运算结束以后向调用它的母函数或者系统反馈一个值,这个值可以是各种变量类型. 举个简单的例子: int add(int a,int b) { return (a+b); } int main() { int res; res=add(3,4); printf("%d",res); return 0; } 在主函数main中调用子函数add,并传递参数3和4过去,add经过运算后得到值7,通过return语句将得到的值返回给调用它的main函数供其使用,而在main中,返回值被用于给res赋值。 函数返回值就可以理解为解决一个问题以后得到的结论,把这个结论交给别人,就像写在书上成为一个定理,来让别人使用。
所谓函数返回值是一个函数在运算结束以后向调用它的母函数或者系统反馈一个值,这个值可以是各种变量类型.举个简单的例子:intadd(inta,intb){return(a+b);}intmain(){intres;res=add(3,4);printf("%d",res);return0;}在主函数main中调用子函数add,并传递参数3和4过去,add经过运算后得到值7,通过return语句将得到的值返回给调用它的main函数供其使用,而在main中,返回值被用于给res赋值。函数返回值就可以理解为解决一个问题以后得到的结论,把这个结论交给别人,就像写在书上成为一个定理,来让别人使用。
C语言规定,函数返回值的类型是由( )。A. return语句中的表达式类型所决定B. 调用该函数时的主调函数类?
当然是由函数决定的啊:
比如声明一个函数
int prot(int *, int);
那么这个函数的返回值int型返回值。
可以写成return XX -->XX是int型,如果这里你写成其它型的(如A说的),编译会报错
再就是函数声明写成prot(int *, int), //不给他声明返回类型。
PC机会隐式的让返回值为int型,如果你return 0.32, 返回去的值其实是0.
既然C语言函数的局部变量会被释放,那为什么函数还可以把它return返回呢?
看了底下兄弟的答复,只能说答对了一半。
ABI定义了与系统交互的细节:如数据类型、大小和对齐;调用约定(函数的参数的传递方向、可变长度处理、堆栈清理主体以及如何接受返回值等);系统调用的编码和一个应用如何向操作系统进行系统调用;以及在一个完整的操作系统ABI中,目标文件的二进制格式、程序库等等。一个完整的ABI,像Intel二进制兼容标准 (iBCS),允许支持它的操作系统上的程序不经修改在其他支持此ABI的操作体统上运行。
其他的 ABI 标准化细节还包括 C++ 名称修饰 ,和同一个平台上的编译器之间的调用约定,但是不包括跨平台的兼容性。
至于底下兄弟所说的EAX保存返回值,这个只是X86的ABI规范,在PowerPC等其他CPU架构平台,实现是不一样的!——PowerPC下,返回值是保存在R3寄存器中的
谢邀。
C语言函数的局部变量在函数执行完毕后,会被释放,相信即使是C语言初学者,也是了解这一点的。不过,我们在函数中定义一个局部变量,却是可以通过 return 语法将其返回给调用者的,这也许就是题主的疑惑之处。
C语言函数怎么可以把一个被释放的值返回给调用者使用呢?
请看下面这张图,进一步来说,C语言程序每调用一个函数,就会在栈区为其分配一块区域,所有局部变量都是在这块区域里存放的,函数执行完毕返回后,系统自动就将这块区域收回了。
这块区域较为正式的名字叫“栈帧”。
既然函数的局部变量都存放在栈区,栈区在函数返回就释放了,那为什么 add 函数还能把局部变量返回呢?
其实函数返回的并不是局部变量,而是局部变量里面存放的数据
我们用鞋柜来比喻局部变量,用鞋子来比喻数据。我们想取出的是鞋子,而不是鞋柜,对吗?
到此,以上就是小编对于c语言返回值返回到哪里的问题就介绍到这了,希望介绍关于c语言返回值返回到哪里的3点解答对大家有用。