[問題] c的變數有效範圍題(對不起我又有問題了QQ)
int a=1,b=2;
int add(int x,int y)
{
int a=100;
a=x+y;
b=x-y;
printf("a=%d,b=%d\n",a,b);
return(x*y);
}
void main(void)
{
int a=10
a++;b++;
printf(("a=%d,b=%d\n",a,b);
{
int b=50
a++;b++;
printf(("a=%d,b=%d\n",a,b);
}
b=add(a,b);
printf(("a=%d,b=%d\n",a,b);
}
想請問四次印出來的結果是
a=15,b=9
a=11,b=3
a=12,b=51
a=12,b=36
這樣嗎?
另外再問一下
add跟main有宣告a,所以a會另外產生位置給區域變數裡的a
可是副程式ab都有動到,為什麼a是動區域變數b卻是動全域變數?
拜託大家了,謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.71.78.79
→
06/29 17:44, , 1F
06/29 17:44, 1F
→
06/29 17:45, , 2F
06/29 17:45, 2F
→
06/29 17:45, , 3F
06/29 17:45, 3F
→
06/29 17:45, , 4F
06/29 17:45, 4F
→
06/29 17:45, , 5F
06/29 17:45, 5F
→
06/29 17:46, , 6F
06/29 17:46, 6F
→
06/29 17:47, , 7F
06/29 17:47, 7F
→
06/29 17:48, , 8F
06/29 17:48, 8F
→
06/29 17:48, , 9F
06/29 17:48, 9F
→
06/29 17:49, , 10F
06/29 17:49, 10F
→
06/29 17:49, , 11F
06/29 17:49, 11F
→
06/29 17:56, , 12F
06/29 17:56, 12F
→
06/29 18:12, , 13F
06/29 18:12, 13F
→
06/29 18:44, , 14F
06/29 18:44, 14F
對不起我又有問題了|||
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)
→
06/30 21:32, , 15F
06/30 21:32, 15F
→
06/30 21:33, , 16F
06/30 21:33, 16F
→
06/30 21:34, , 17F
06/30 21:34, 17F
→
06/30 21:34, , 18F
06/30 21:34, 18F
→
06/30 21:34, , 19F
06/30 21:34, 19F
→
06/30 21:35, , 20F
06/30 21:35, 20F
→
06/30 21:35, , 21F
06/30 21:35, 21F
→
06/30 21:36, , 22F
06/30 21:36, 22F
→
06/30 21:36, , 23F
06/30 21:36, 23F
→
06/30 21:36, , 24F
06/30 21:36, 24F
→
06/30 21:36, , 25F
06/30 21:36, 25F
→
06/30 21:38, , 26F
06/30 21:38, 26F
→
06/30 21:39, , 27F
06/30 21:39, 27F
→
06/30 21:39, , 28F
06/30 21:39, 28F
→
06/30 21:40, , 29F
06/30 21:40, 29F
→
06/30 23:28, , 30F
06/30 23:28, 30F
→
06/30 23:28, , 31F
06/30 23:28, 31F
→
06/30 23:29, , 32F
06/30 23:29, 32F
→
06/30 23:30, , 33F
06/30 23:30, 33F
→
06/30 23:36, , 34F
06/30 23:36, 34F