→ longlongint:a=11,b=3 06/29 17:44
→ longlongint:a=12,b=51 06/29 17:45
→ longlongint:a=15,b=9 06/29 17:45
→ longlongint:a=12,b=36 06/29 17:45
→ longlongint:至少我編譯出來是這樣(汗 06/29 17:45
→ longlongint:一個變數的生命週期只在宣告的範圍內 block { } 06/29 17:46
→ longlongint:若以變數名稱叫一個變數,以生命範圍最小的變數優先 06/29 17:47
→ longlongint:把最大的a改成AG main裡面的a 改成AM 以此類推 06/29 17:48
→ longlongint:然後你去想想那個a是哪個a b是哪個b 06/29 17:48
→ longlongint:更正 是"可參考到的變數裡面" 生命範圍最小的那個 06/29 17:49
→ longlongint:所以add動到的是全區的b 06/29 17:49
→ longlongint:有錯請鞭... 06/29 17:56
→ jtafstn:原來如此@@ 謝謝你> < 06/29 18:12
→ longlongint:不客氣~~ 06/29 18:44
對不起我又有問題了|||
int p=10;
main ( )
{
int sub1(void);
int sub2(int);
int sub3(int *);
int a=5,b=8,i;
for(i=1;i<=3;i++)
{
sub2(a);sub3(&b);
printf("%d th time %d,%d,%d,%d\n",i,sub1(),a,b,p);
}
}
int sub1(void)
{
static int x=0;
a++;return (x);
}
void sub2(int y);
{
y--;p-=y;
}
void sub3(int *z)
{
*z+=1;
}
輸出的部分我算出來是
1 th time1 5 9 1
可是答案給
1 th time1 5 9 6
想問一下p在整個程式的變化過程詳細
還想問sub3(&b)跟sub3(int *)的部分
是先把z指向p 然後b又指向z 所以b會取到p的值 是這樣嗎@@
不好意思麻煩了
※ 編輯: jtafstn 來自: 219.71.78.79 (06/29 22:01)
→ longlongint:sub1裡面有a++所以沒辦法編譯 我可以把它修成x++嗎? 06/30 21:32
→ longlongint:底下的sub2不用分號 06/30 21:33
→ longlongint:執行結果 06/30 21:34
→ longlongint:1th time 1,5,9,6 06/30 21:34
→ longlongint:2th time 2,5,10,2 06/30 21:34
→ longlongint:3th time 3,5,11,-2 06/30 21:35
→ longlongint:dev c++下載網址 06/30 21:35
→ longlongint:網址太長了 google找dev c++ 06/30 21:36
→ longlongint:安裝之後 把程式碼前面加標頭檔 06/30 21:36
→ longlongint:main()的最後面加 system("pause"); 06/30 21:36
→ longlongint:編譯看看 06/30 21:36
→ longlongint:sub2()是傳值所以a不會變 06/30 21:38
→ longlongint:sub3(&b)是傳地址 所以改變z會動到b 06/30 21:39
→ longlongint:sub1() 因為x 是static函數,值會被保留到以後的呼叫 06/30 21:39
→ longlongint:p是全區變數你應該很了解了@@+ 06/30 21:40
→ longlongint:x每次呼叫皆會加一 所以是 1 2 3 06/30 23:28
→ longlongint:a完全不變 一直是5 06/30 23:28
→ longlongint:b每次都+1 所以 9 10 11 06/30 23:29
→ longlongint:p每次都減掉(a-1) 所以一直減四 所以是 6 2 -2 06/30 23:30
→ longlongint:其實實際寫程式不會搞得這麼混亂,誤導看碼的人幹嘛XD 06/30 23:36