C語言中呼叫函式change data 和data change data 有什麼區別?

時間 2021-07-10 16:36:26

1樓:眼鏡獒

change(&data)或者data=change(data),哪有data=change(&data)這種又傳位址又返回修改過後的值的?傳了位址就可以直接修改值,為什麼要有個多餘的返回值?有了返回值就可以在外面接收,為什麼又要傳乙個多餘的位址?

2樓:

差乙個賦值操作。

// assume data is 1

intdata=1

;// value of data -> 1

// assume the change function is below

intchange

(int

*data

)上邊這個函式,如果使用

change(&data); // value of data 1 -> 2 (increment)

的方式呼叫的話,data的值將變成2,因為change函式把data的值加一了。

如果使用

data = change(&data); // value of data 1 -> 2 (increment) -> 1 (assignment)

的方式呼叫,由於change的返回值是data加一之前的值,所以data在加一之後又被賦值為了未加一時的值,所以data的值將變成1。

如果將函式中的(*data)++變成++*data,這兩種方式的呼叫都會使data的值變成2。

但第二種呼叫方式,data的值的變化為data -> 1 -> 2 (increment) -> 2 (assignment) 。

儘管得到了與第一種呼叫方式相同的值,但依舊多一步賦值操作。

根據change函式的不同,這個賦值操作不一定會將data的內容變成什麼。

3樓:星辰

題主知道等於是賦值操作吧,這兩個其實差就差在賦值操作了,不是將函式賦值給乙個變數,實際上是將返回值賦值給那個變數,題主寫main主函式的時候是不是有return 0;語句啊,那個0就是返回值。

在C語言中,函式呼叫前是否必須先宣告?

大江 我的理解是,所呼叫函式可能的返回值型別不同占用的記憶體空間大小不一樣的,而返回值是需要放在臨時空間裡的,所以你需要告訴編譯器需要多少的記憶體空間,比如int需要4位元組,double需要8位元組,如果不寫,編譯器假定留出最通用的4位元組給臨時變數。當然這跟規範和標準以及編譯器的實現有關。如果以...

C語言中既然可以呼叫函式,為什麼還要發明go to語法呢?

雨花 保持跟彙編相容 上古時候一次額外的函式呼叫有很大的效能開銷,我記得很小的時候讀的書裡面還說要盡量合併函式體,節省函式呼叫開銷,不過也不確定他是不是胡說,早年國內計算機技術真不咋地。現在一般都是反過來,能拆成函式的都拆成函式。 陳寧聰 C語言沒有CPS,有了CPS你就可以不要goto了 笑 嚴肅...

c語言是否可以通過呼叫void函式來完成對陣列的賦值?

zr scat 變長陣列啊,c99範疇,vc沒戲,並且陣列在函式引數會退化為指標 如果陣列引數退化成指標,則不知道步長,不行,可以強行傳入步長來搞定 如果只是想初始化為0的話,直接 不必如此麻煩 雲天明 double z不完了麼 void zeros int width,int height,dou...