欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

c語言函數(shù)的副作用 c語言的作用和影響

C語言函數(shù)問題

編譯器根據(jù)對代碼進行優(yōu)化的需要自行規(guī)定對實參的求值順序。有的編譯器規(guī)定自左至右,有的編譯器規(guī)定自右至左,這種對求值順序的不同規(guī)定,對一般參數(shù)來講沒有影響。但是,如果實參表達式中帶有副作用的運算符時,就有可能產(chǎn)生由于求值順序不同而造成了二義性。你的編譯器是自右向左的順序。

創(chuàng)新互聯(lián)專注于企業(yè)全網(wǎng)整合營銷推廣、網(wǎng)站重做改版、達日網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、H5頁面制作商城網(wǎng)站開發(fā)、集團公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為達日等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

c語言為什么有函數(shù)危險一說啊? 比如gets()的溢出操作等;

是的,如果這是某書上的做法,那么,我只能說它為你們提供了一個錯誤的榜樣。

這樣使用gets()已經(jīng)發(fā)生了溢出!這是gets()不檢查數(shù)據(jù)邊界的bug造成的。

另外,“字符串不是總是以'\0'作為串的結(jié)束符”,答案是肯定的,不然puts()函數(shù)就不能在合適的地方停下來了。這里st[15]被gets()函數(shù)賦值為'\0'。這里要說明的是st[15],st[16]是存在而不合法的,因為字符串實際上就等同于指針,類似st[16]是實在的地址但是是不應(yīng)該被引用的。

為什么這里溢出沒有產(chǎn)生錯誤?可能系統(tǒng)分配內(nèi)存是以一個最小的大小整段整段的分配(這個我只是猜測)。你可以試著輸入的字符串變長一點,就可以看到內(nèi)存讀寫出錯的提示了,這就是溢出的嚴重后果!我在dos系統(tǒng)下測試字符串長了直接當機。

驗證1:st[15]被賦值為'\0'

#include"stdio.h"

main()

{

charst[15];

printf("inputstring:");

gets(st);

puts(st);

printf("%d",st[15]);

getch();

}

驗證2:

#include"stdio.h"

main()

{

charst[15];

printf("inputstring:");

gets(st);

puts(st);

//printf("%d",st[16]);

st[1]='\0';

printf("%s\n",st);

printf("%s",st+2);

getch();

}

同樣的建議:拒絕gets(),這本來就是一個有bug的函數(shù)!

為什么C語言的子函數(shù)不直接用型參參與運算,而是另外聲明個局部變量,形參再賦值給這個局部變量?

函數(shù)的副作用是最令人頭疼的問題

我們都知道形參使得函數(shù)可以改變調(diào)用者的變量值

所以很容易產(chǎn)生副作用

所以函數(shù)設(shè)計時應(yīng)當避免頻繁改變形參的值

這就是你所看到的現(xiàn)象:“不直接用型參參與運算”

這樣就不會改變調(diào)用者的變量值

當然最后還是要改變形參的值,否則形參就沒有意義了

還有另一個原因是編譯有關(guān)的

局部變量是在棧分配空間的

生成的機器代碼是近調(diào)用的短地址

而形參就很難說了

可能有的編譯器,先按值參處理,最后再用結(jié)果修改形參

這樣做就不用擔心“直接用型參參與運算”的會頻繁修改形參了

但是卻不符合形參的本義

因此編譯器會直接引用形參的地址,就會生成遠調(diào)用的長地址了

把形參編譯成長短不同的地址,這在調(diào)用系統(tǒng)功能時就有講究了

你的代碼里有“interrupt”字樣,我沒猜錯的話就是中斷調(diào)用

這時需要長地址還是短地址,那可是一點也不可弄錯了

用局部變量就會得到短地址

標題名稱:c語言函數(shù)的副作用 c語言的作用和影響
網(wǎng)站URL:http://www.chinadenli.net/article42/doogcec.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計全網(wǎng)營銷推廣靜態(tài)網(wǎng)站網(wǎng)站營銷云服務(wù)器網(wǎng)站維護

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

手機網(wǎng)站建設(shè)