如果代码中没有 return 语句,函数在 C 程序中返回什么

2024-02-18

我做了一个关于如何在 C 中递归地反转单链表的函数。

功能如下。

struct node * reverseSLL2(struct node *p,struct node *temp)
{
    struct node *temp1;
    if(p!=NULL)
    {
        temp1=p->link;
        p->link=temp;
        reverseSLL2(temp1,p);
        //return;
    }
    else
    {
        return temp;
    }    



}

我调用 head=reverseSLL2(head,NULL) ,其中 head 是指向链表第一个节点的指针。程序工作正常!

但是,我这里有两个问题:

1)我对函数的所有调用除了最后一次调用之外,都没有到达return语句,那么这些函数返回了什么?

2)如果我写(取消注释)前面代码中已注释的返回语句。在这种情况下,函数返回什么?

谢谢。


这是未定义的行为。编译代码应该会产生一条警告,提示通过缺少 a 的代码路径到达函数末尾。return.

您看不到该函数已损坏并观察到它产生正确结果的原因是因为从基本情况分支返回的实际值(即else)确实有一个正确的return。编译后的代码可能会在堆栈上的所有函数调用中重用最后一个返回值,因此调用者最终会获得预期的值。

但是,该代码无效。你应该添加return在递归调用之前解决问题:

return reverseSLL2(temp1,p);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果代码中没有 return 语句,函数在 C 程序中返回什么 的相关文章

随机推荐