8 回答

TA貢獻(xiàn)2021條經(jīng)驗 獲得超8個贊
這里涉及到變量作用域的問題,局部變量的作用域從聲明開始,到所在函數(shù)的結(jié)束,,在子函數(shù)內(nèi)的變量,同名的其他變量將被暫時屏蔽。所以會出現(xiàn)以上情況。在add函數(shù)內(nèi),add內(nèi)的sum將暫時屏蔽main內(nèi)的sum,但這兩個sum并不是同意變量,你可以將他們在內(nèi)存的地址打印出來證明一下。這時候add的sum接收傳入的值3,自增后為4,將打印4,在add函數(shù)結(jié)束后,main內(nèi)的sum恢復(fù)作用,但他們不是同意變量,所以main內(nèi)的sum值并沒有改變

TA貢獻(xiàn)1757條經(jīng)驗 獲得超7個贊
這個和局部變量作用域沒什么關(guān)系.
而是傳參方式.
add函數(shù)傳值調(diào)用, 而不是傳指針調(diào)用.
所以在add中改變形參num的值,不會影響主函數(shù)中實參num的值.

TA貢獻(xiàn)1802條經(jīng)驗 獲得超5個贊

TA貢獻(xiàn)1921條經(jīng)驗 獲得超9個贊
add函數(shù)里面的num是另一個變量,和主函數(shù)中的num不一樣。它們兩都是臨時變量,除了變量名相同沒有什么關(guān)系。
add函數(shù)只是通過參數(shù)的方式獲取了主函數(shù)里面的num的值,也就是給了add中的num初始值,但是并沒有把計算后的值返回給主函數(shù)中的num,所以主函數(shù)中的num并沒有被改變
1 2 3 4 5 6 7 8 9 10 11 12 13 | main() { int num=3; add(num); //調(diào)用add()函數(shù) printf("%d\n",num); //輸出變量num值為3 }
//把變量名換一下就明白了,這個變量和num是兩回事,和局部變量作用域沒有半毛錢關(guān)系 void add(int aa) { aa++; //aa自增1 printf("%d\n",aa); //輸出變量aa值為4 } |

TA貢獻(xiàn)1794條經(jīng)驗 獲得超7個贊
因為你的add函數(shù)是傳值進(jìn)來的,不是傳址。你對形參自增,也只是將新的變量num自增了而已,原先的變量num,還是不會變的。
除非,你 void add(int *num) { *num = *num + 1;printf("%d\n",*num);}
外面就 add(&num);

TA貢獻(xiàn)1785條經(jīng)驗 獲得超4個贊
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | //注釋的描述應(yīng)該都對沒有錯。 //如果說時編譯不過,時因為缺少頭文件和main函數(shù)返回類型 #include <stdio.h> void add(int); void main() { int num=3; add(num); //調(diào)用add()函數(shù) printf("%d\n",num); //輸出變量num值為3 } void add(int num) { num++; //num自增1 printf("%d\n",num); //輸出變量num值為4 } |

TA貢獻(xiàn)1887條經(jīng)驗 獲得超5個贊
你的注釋里面的輸出是對的。
這個問題并不是探討局部變量作用域的問題,而是函數(shù)是傳值還是傳址的問題。傳值,指的是參數(shù)傳遞的過程中,傳過去的參數(shù)實際傳入的是這個變量的一個拷貝而不是這個變量本身。因為對變量拷貝所以對拷貝后的變量做任何更改都不會改變變量本身。如果需要改變變量本身,可以傳遞變量的地址過去,再修改地址里面的內(nèi)容。這是指針的知識。以后你學(xué)到指針,你就會明白這個道理。下面附的代碼是討論作用域的問題。
1 2 3 4 5 6 7 8 9 10 | int a =1; main(){ printf("a1 = %d\n",a); int a = 2; { int a =3; printf("a3 = %d\n",a); } printf("a2 = %d\n",a); } |

TA貢獻(xiàn)1796條經(jīng)驗 獲得超10個贊
首先,這不是“局部變量作用域”的問題。
C語言中,函數(shù)的數(shù)值傳遞常用的有兩種方法:變量傳遞、指針傳遞。
顯然,你使用的是變量傳遞。
add(num); 這個函數(shù)的作用是傳入一個數(shù)值,然后這個數(shù)值加一。注意,這里僅僅是對傳入的數(shù)值3進(jìn)行加一,不是對main()函數(shù)中的num變量加一。所以無論你在add(num)函數(shù)中對傳入的數(shù)值做任何操作,都不會改變main()函數(shù)中的變量num。
- 8 回答
- 0 關(guān)注
- 939 瀏覽
添加回答
舉報