结构体和结构体指针作为函数返回值

结构体作为函数返回值

当被调用的子函数返回值为结构体的时候,调用函数将分配一段空间用于存放返回的结构体(使用一个结构体变量接受返回值),并将这段空间的地址作为调用时的参数压栈

子函数不负责对要返回的结构体分配空间。最后返回eax中存放的是结构体空间(栈中)的地址。在子函数退出的时候,调用函数可以在自己的栈帧中访问到返回的值。

Stu getStu(int x, int y)
{
        Stu result;
        result.a = x;
        result.b = y;
        return result;
}

结构体指针作为函数返回值

子程序填充malloc在堆中生成的结构体空间,并将其地址存放在eax中返回。但是这种使用方式存在的很大问题是在子程序中使用到了malloc但是没有与之对应的free,如果在调用函数中忽视释放操作的话将会导致堆内存的泄露。

Stu * getStu(int x, int y)
{
        Stu *pStu = malloc(sizeof(Stu));
        pStu->a = x;
        pStu->b = y;
        return pStu;
}

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×