壹般情況下(沒有&),function的定義就是輸入固定數量的輸入值(可以是0個),function會進行某些計算或者操作,最後有可能返回壹個值。
比如上例中的main,就是0個輸入值,進行壹段操作後,返回壹個整數0。
第壹個printf,就是壹個輸入值:字符串“xxxx”,進行壹段操作(在屏幕上顯示出輸入的字符串),沒有返回值或者返回值沒有被使用。
在這樣的壹般情況下(沒有&),輸入的值,比如change,在function中就是壹個純粹的數值。
比方說,前面那句int change=。。。,計算得到change=30.
那麽,後面那壹句printf("xxx",change),就完全等同於printf("xxx",30)
如果妳使用多線程程序,在printf("xxx",change)的執行過程中,在另壹個線程中改變change的值,比如change=0,這個運行中的printf完全不會受到影響。因為實際調用的是printf("xxx",30),除了調用的那壹刻,要把30從change中解讀出來外,之後就完全與變量change無關了。
同樣的,在printf中,如果有對change進行重新賦值,比如change=20。當這句printf運行完畢,重新回到main中的之後,printf中的那次賦值就會作廢,main中的change依然保持30不變。
使用&的情況下,scanf("%d", &number)與scanf("%d", 0)就不壹樣了。
scanf("%d", &number)所輸入給scanf的,不是number裏面的數值0,而是number這個變量本身。scanf內對number做的任何改變(比如,把鍵盤輸入的數值賦值給number),都作用於main中的number變量本身。其它線程中對number的改變,也會同時作用於scanf中的number