📄 00000004.htm
字号:
<HTML><HEAD> <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>发信人: <A HREF="mailto:ax.bbs@bbs.ee.nthu.edu.tw.">ax.bbs@bbs.ee.nthu.edu.tw.</A> (athena), 信区: test <BR>标 题: 星星流讲座 0040 <BR>发信站: ☆清华电机☆ (Sat Jul 8 16:30:45 1995) <BR> <BR> <BR>第 6 讲 之 3 函数 <BR> Topic: Return value <BR> <BR>我们现在来研究一下函数要如何正确地传回它的传回值。 <BR> <BR>除了回传值资料型态为 void 的函数之外,所有的函数者必须传回一 <BR>个值,传值的方法很容易,请看下面的□例: <BR> <BR>/* return the summation of array a[] */ <BR>int sum (int a[], int n) <BR>{ <BR> int i, sum; <BR> sum = 0; <BR> for (i = 0; i < n; i++) <BR> sum += a[i]; <BR> return sum; <BR>} <BR> <BR>return 这个指令会立即中止函数的执行,并把其後的值传回给函数的 <BR>呼叫者 (caller)。传回的值它的型态必须和函数原型中宣告的一致, <BR>如果不一致的话,必须做强制型态转换,例如: <BR> <BR>int sum (double a[], int n) <BR>{ <BR> int i; <BR> double sum = 0; <BR> for (i = 0; i < n; i++) <BR> sum += a[i]; <BR> return (int) sum; <BR>} <BR> <BR>传回值也可以是一个指标,例如: <BR> <BR>char *err_msg (int errno) <BR>{ <BR> static char *mesg[] = {"Error 1", "Error 2"}; <BR> <BR> return mesg[errno]; <BR>} <BR> <BR>我们最常见的传回指标错误就是像这个样子: <BR> <BR>/* err.c */ <BR>#include <stdio.h> <BR>#include <string.h> <BR> <BR>char *err_msg (void); <BR> <BR>void main (void) <BR>{ <BR> printf ("%s\n", err_msg ()); <BR>} <BR> <BR>char *err_msg (void) <BR>{ <BR> char buf[10]; <BR> strcpy (buf, "Error 1"); <BR> <BR> return buf; <BR>} <BR> <BR>这个程式看起来一切都很好,那儿错了呢?错就错在 buf 是一个自动变数, <BR>当 err_msg 这个函数结束的时候,buf 就被消灭了,所以你传回来的东西等 <BR>於是一堆垃圾。怎麽解决?想想静态变数吧! <BR> <BR>-- <BR>本文原作者为徐振家,原作刊载於星星神教总坛 ☆清华电机☆ test 板。 <BR>你可以以电子文件的形式将本文自由流传於台湾学术网路,但必须包含此版权声明。 <BR>原作者依中华民国著作权法之规定,享有本文之著作权,请勿抄袭以免触法。 <BR>未经授权任何人不得以任何形式对本文做任何修改及商业上之应用。 <BR>其他网路的转载或其他用途的应用,请先知会作者,并取得其同意。 <BR>对本文有任何疑问或意见请 mail 给 <A HREF="mailto:ax.bbs@bbs.ee.nthu.edu.tw,谢谢。">ax.bbs@bbs.ee.nthu.edu.tw,谢谢。</A> <BR> <BR> <BR><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -