[問題] 新手請教前置遞增運算子的問題
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
windows, 很簡單的用notepad++做編輯,compile用 lcc-win32
問題(Question):
前置遞增運算子 + function 內 return
程式碼(Code):(請善用置底文網頁, 記得排版)
#include <stdio.h>
int a = 4;
int funk1(int a){
return(++a);
}
void proz(){
++a;
}
int funk2(int *a){
return ((*a)++);
}
int main(){
proz();
//printf("a = %d\n", a);
funk1(a);
printf("1: a = %d\n", a);
funk2(&a);
printf("2: a = %d\n", a);
getchar();
return 0;
}
我們必須畫出 Zeigerdiagramm(就是變數會指到一個reference, 再指到 value 的圖)
我畫完之後的結果會是,在呼叫完 funk1(a) 後,a 會等於 6,
呼叫完 funk2(&a) 後,a 會等於 7..
可是打進程式編碼完後執行的結果都少一,
所以我在呼叫 proz() 後增加一個 print out 來檢查我的觀念是哪裡有問題,
proz() 呼叫完後 a=5,所以我的問題應該是在 return(++a) 這裡。
請問為什麼不是 return 6 而是 return 5 呢?
是因為 funk1 先把 5 return 給全區變數的那個 a 以後,自己的 a 再加一嗎?
(然後跳出 function 後他自己的 a 裡的值就被清掉了?)
--
不好意思,我這些東西都是用德文學的,
然後再盡我所能的翻成英文,因為很多東西我不知道怎麼用中文講。
麻煩大家了,謝謝<(_._)>
--
╔╦╩CSI★LV★GREG SANDERS★╠□╦╩╬╦╠╦●╩═ ╬◆╠╬╠╬╦☆═╦╬█╗
╠ ╭═══╮╭═══╮╔═══╗葛瑞格.山德斯(Greg Sanders) [n.][a.][v.] ╬
╬ ║ ╭═╯║ ╰╯╚═╗╔╝ 【n.】LV 夜班寵物兼鑑識員跟實驗室檢定人員 ╣
◆ ║ ╰╯║╭═╮ ║╔═╝╚╗ 【a.】調皮的;歡樂的;情緒明顯的;興趣多廣的 ║
╣ ╰═══╯╰═══╯╚═══╝ 【v.】不懂得時機說話;表現後期待主人稱讚 ╠
╩╬╦╗☆╩═╚╣╔╦╝╬╩║╣╦■╦╗╠╬╣☆╩╝╬◇╠╗╦╬╩╬阿皮ψ╦╣
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 217.87.229.105
→
05/14 01:26, , 1F
05/14 01:26, 1F
這個我懂,b=++a 是先算 a=a+1 後再做 b=a,
b=a++ 則是b=a+1,a 則仍是原來的值沒有變動。
我想問的是,為什麼 return(++a) 後,
全區變數的 a 仍是 5 而不是 6?
※ 編輯: miyabichan 來自: 217.87.229.105 (05/14 01:31)
→
05/14 01:36, , 2F
05/14 01:36, 2F
→
05/14 01:38, , 3F
05/14 01:38, 3F
→
05/14 01:39, , 4F
05/14 01:39, 4F
→
05/14 01:39, , 5F
05/14 01:39, 5F
推
05/14 01:39, , 6F
05/14 01:39, 6F
→
05/14 01:40, , 7F
05/14 01:40, 7F
→
05/14 01:40, , 8F
05/14 01:40, 8F
→
05/14 01:40, , 9F
05/14 01:40, 9F
→
05/14 01:40, , 10F
05/14 01:40, 10F
→
05/14 01:41, , 11F
05/14 01:41, 11F
→
05/14 01:43, , 12F
05/14 01:43, 12F
→
05/14 01:43, , 13F
05/14 01:43, 13F
→
05/14 01:43, , 14F
05/14 01:43, 14F
→
05/14 01:50, , 15F
05/14 01:50, 15F
→
05/14 01:56, , 16F
05/14 01:56, 16F
→
05/14 01:58, , 17F
05/14 01:58, 17F
→
05/14 01:58, , 18F
05/14 01:58, 18F
→
05/14 02:01, , 19F
05/14 02:01, 19F
推
05/14 02:01, , 20F
05/14 02:01, 20F
→
05/14 02:02, , 21F
05/14 02:02, 21F
→
05/14 02:02, , 22F
05/14 02:02, 22F
→
05/14 02:03, , 23F
05/14 02:03, 23F
→
05/14 02:04, , 24F
05/14 02:04, 24F
→
05/14 02:04, , 25F
05/14 02:04, 25F
→
05/14 02:05, , 26F
05/14 02:05, 26F
→
05/14 02:07, , 27F
05/14 02:07, 27F
→
05/14 02:08, , 28F
05/14 02:08, 28F
→
05/14 02:09, , 29F
05/14 02:09, 29F
→
05/14 02:13, , 30F
05/14 02:13, 30F
→
05/14 02:16, , 31F
05/14 02:16, 31F
→
05/14 02:42, , 32F
05/14 02:42, 32F
→
05/14 02:52, , 33F
05/14 02:52, 33F
→
05/14 05:10, , 34F
05/14 05:10, 34F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 2 篇):