1.
大致的了解是這兩個宣告都可以讓變數保留上次的數值
(a)
課本上說
static是屬於區域變數
那傳參考呼叫是全域的意思嗎??
搞混....
(b)
為何要使程式的變數改變數值呢
這樣不會更複雜嗎
2.
不好意思再問個小問題
function( int )
void fuction( int )
void function( void )
這三個自訂函式如何區分用法
void課本並沒有詳細的說明...所以不太懂用法
如果有簡單的範例更好^^
2007-01-12 11:20:38 · 2 個解答 · 發問者 LIAO 1 in 電腦與網際網路 ➔ 程式設計
對不起 我不太了解你的 "傳參考" 指的是什麼 (我是用 "傳值" 和 "傳址")
根據你下面的問題, 我猜 大概是 傳址 吧
static 一般用在某函數 或 副程式之內
可以記住該變數最後的值 不會因為離開函數 或 副程式而消失
例如:
main {
test1(); /* 印出 "n = 0" */
test1(); /* 印出 "n = 1" */
}
void test1(void)
{
static n = 0;
printf("n = %d\n", n);
n=n+1;
}
傳址 是為了要更改所傳進去的值
例如:
a = 3;
add1 (&a); /* 這樣 a=4. 用傳值的方式是無法從副程式改變 a 值的 */
void swap(int *n)
{
*n += 1;
}
以上兩個例子就 "像" 問題 2 的
void fuction( int ) /* 應該說 void fuction( int * ) 才對 */
void function( void )
也就是說 一個需要傳變數 一個不需要
至於 function( int )
顯然它是需要傳變數的
但是它的前面沒寫東西 表示它不會回傳資料
跟寫 void 的意思一樣
不過有些系統不接受那樣的寫法
如果它會回傳資料, 前面就要寫回傳資料的型態.
例如:
int X2(int n)
{
return(2*n);
}
它把變數 n 乘以兩倍後傳回來, 所以要標示將傳回整數值.
至於它和 void X2(int *n) 的差別在於呼叫程式的接受方法不一樣.
傳址:
n = 3;
X2(&n); /* n 會被改成 6; 而且 不可以 如此呼叫 X2(3); */
傳回值:
n = 3;
new_n = X2(n); /* n 不會被改 */
或
new_n = X2(3); /* 可以直接傳值 */
兩者各有優點, 就看你的經驗了.
如果有問題, 請來函討論. 不然, 我可能會錯失你再補充的疑點.
2007-01-13 01:29:59 · answer #1 · answered by JJ 7 · 0⤊ 0⤋
1.a
全域變數,定義在函數外
區域變數,定義在函數內
1.b
不明白你的問題
2
function( int )
void fuction( int )
上面兩個有衝突,參數型態一樣
void fuction( int )-------------函數1
void function( void )---------函數2
例如:
function(5);-----------呼叫函數1
function();-------------呼叫函數2
void代表沒有東西
void function( void )
因為前面是void,所以 return;
如果
BOOL fun(void)
需要 return BOOL型態的東西
2007-01-12 14:01:28 · answer #2 · answered by Anonymous · 0⤊ 0⤋