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