跳转至

return 用法

基础补充 · 专题阅读 · 保留代码与校订注 · 本次导入快照

return 用法

函数就像一个管理员。你给他指令(参数),他在里面忙活一阵,最后 return 做两件事:

  1. 立刻下班——后续指令全部不执行
  2. (可选)递出来一样东西——可能是钱、包、纸条

注意,返回的类型和函数前写的类型需要完全相同。

return 本质上是提前结束函数并返回值(可以理解成提前交卷)。

提前结束,递出类型 int / float / char 等

int add(int a, int b)        // 管理员收到两堆钱 a 和 b
{
    return a + b;            // 把两堆钱加起来,递给你结果,然后下班
}

void 函数可以写 return; 来提前收工,不返回值

void PreOrder(BiTNode *T)
{
    if (T == NULL) return;   // 给的纸条是空的 → 直接下班
    visit(T);                // 否则继续干活
    PreOrder(T->lchild);
    PreOrder(T->rchild);
}

提前结束,返回 NULL(属于指针类型)

BiTNode* BST_Search(BiTNode *T, ElemType x)
{
    BiTNode *p = T;
    while (p != NULL)
    {
        if (x == p->data)
            return p;        // 找到了目标包的位置,把纸条递给你
        if (x < p->data)
            p = p->lchild;
        else
            p = p->rchild;
    }
    return NULL;             // 没找到,递一张空白纸条
}

不提前结束,会返回默认值

void traverse(LNode *L)      // 收到一张纸条 L
{
    LNode *p = L;
    while (p != NULL)
    {
        visit(p->data);      // 打开包查看
        p = p->next;         // 拿纸条去下一个包
    }
                             // 所有包都查看过了 → 默默下班,不递东西
}

多条路,每一条都有 return,但只会经过一条路

int find(int a[], int n, int x)
{
    for (int i = 0; i < n; i++)
        if (a[i] == x)
            return i;        // 走这条路:找到了,下班
    return -1;               // 走那条路:没找到,下班
}
// 不管走哪条,一定会 return,不会出现管理员站门口不走的情况