首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C語言函數返回值機制與指針傳址實現多值返回

     編輯:關於C語言

return 語句與單值返回

return 語句有兩大作用:立即終止函數執行並返回調用處;向調用者返回一個值。若函數執行完畢自然返回(無 return 或 return;),調用者獲得的值為 0(或未定義)。若需返回具體值,必須使用 return 表達式;。

實例:求三數最大值

#include <stdio.h>

int maxmum(int x, int y, int z); // 函數聲明

int main() {
    int i, j, k, max;
    printf("i, j, k=?\n");
    scanf("%d%d%d", &i, &j, &k);
    max = maxmum(i, j, k); // 接收返回值
    printf("The maxmum value is %d\n", max);
    getch();
    return 0;
}

int maxmum(int x, int y, int z) {
    int max = (x > y) ? x : y;
    max = (max > z) ? max : z;
    return max; // 返回最大值
}

指針參數實現多值返回

return 只能返回單一值。若需返回多個值,可傳遞變量地址(指針)作為參數,被調函數通過解引用修改調用者的變量值。

實例:交換並計算兩數

#include <stdio.h>

void subfun(int *m, int *n); // 接收指針參數

int main() {
    int i, j;
    printf("i, j=?\n");
    scanf("%d %d", &i, &j);
    printf("In main before calling\ni=%-4d j=%-4d i*j=%-4d\n", i, j, i*j);
    subfun(&i, &j); // 傳遞地址
    printf("In main after calling\ni=%-4d j=%-4d i*j=%-4d\n", i, j, i*j);
    getch();
    return 0;
}

void subfun(int *m, int *n) {
    *m = *m + 2;
    *n = *m - *n; // 注意:原代碼有誤,此處修正邏輯
    printf("In subfun after calling\ni=%-4d j=%-4d i*j=%-4d\n", *m, *n, (*m)*(*n));
}

返回指針類型

return 也可返回指針。下例在字符串中查找字符,找到返回該字符地址,否則返回 NULL。

#include <stdio.h>
#include <stdlib.h>

char *match(char c, char *s);

int main() {
    char s[40], c, *str;
    str = malloc(40);
    printf("Please input character string: ");
    gets(s);
    printf("Please input one character: ");
    c = getche();
    str = match(c, s);
    putchar('\n');
    puts(str);
    getch();
    return 0;
}

char *match(char c, char *s) {
    int i = 0;
    while (c != s[i] && s[i] != '\0') // 修正:原為 '\n'
        i++;
    return &s[i]; // 返回字符地址或字符串結束符地址
}

關鍵點總結

  • return 單值返回,配合指針參數實現多值「返回」
  • 指針參數本質是地址傳遞,被調函數修改實參內存
  • 函數可返回指針,但需注意生命週期(勿返回局部變量地址)
  • 字符串查找函數常見模式:返回匹配位置指針或 NULL
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved