首页 » 其他 » 关于返回值的问题

关于返回值的问题

 

C语言怎么返回结构体?

下面从这个问题讨论下函数返回值的问题。

在调用完一个函数后,这个函数的空间会被释放,所以不能返回局部变量的地址,可以返回局部变量的值。一般函数的返回值是通过寄存器EAX返回的,但EAX只能存储4个字节的信息,所以如果函数的返回值不大于4个字节,返回值是放在EAX进行返回的;对于大于4个字节,小于等于8个字节的返回值,是把EAX和EDX联合起来进行返回的,EDX存放高位,EAX存放低位;对于大于8个字节的返回值,函数是怎么返回的呢?

这段代码定义了一个结构体,占用10个字节的空间。在我搜的资料中,都是查看汇编来分析出是怎么返回的,无奈我汇编不会,所以就省去分析过程,直接说结论,想看的我下面贴出来我搜的资料链接。

对于大于8个字节(一般是结构体)的返回值,实现方式是:首先调用函数在栈上分配一段空间,用于接收返回的结构体,因为是调用函数分配的空间,所以被调用的函数执行完毕后这段空间不会被释放,在调用被调函数时,分配的这段空间的地址当作参数传递给被调函数,被调函数执行完毕后,通过EAX返回这个地址,这段空间存放的就是被调函数的返回值,然后再由调用函数操作这个值。

还有关于 main 函数的返回值,main 函数为什么要在最后加一句“return 0”?它的作用是什么?不知道你有没有考虑过这个问题。

大一学 C 语言的时候,用的是谭浩强的那本书,里面的 main 函数都用的是 void main(),那会啥也不懂,怎么教怎么用,后来在别的地方看到有人写 int main(),并且程序最后有一个 return 0,就去搜了一下,原来这样写才是对的。

main 函数的类型必须是 int,这样返回值才能传递给程序的激活者(如操作系统)。它的返回值用于说明程序的退出状态。如果返回0,代表程序正常退出,返回其它数字的含义则由系统决定。通常,返回非零代表程序异常退出。

PS:资料链接

函数返回结构体的内幕

函数返回值如何传递

关于返回结构体的函

原文链接:关于返回值的问题,转载请注明来源!

0