国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

C經典書籍筆記——C陷阱與缺陷③(語意陷阱)

atinosun / 2105人閱讀

摘要:兩個指針所指向位置相同,實際為同一個指針。四求值順序總結語言中只有四個運算符,明確規定了求值順序和先對左邊求值,只在需要時對右邊求值如此避免除錯誤。在結果為真是返回,結果為假是返回。原因一只要的值都限制在和的結果始終相同。

目錄

一、前言

二、字符指針

三、邊界計算與不對稱邊界

1.經典錯誤①

2.經典錯誤②

3.總結

四、求值順序

五、運算符&& ||和!


一、前言


二、字符指針

結論一:復制指針并不會復制指針所指向的內容。兩個指針所指向位置相同,實際為同一個指針。

結論而:開辟兩個數組,即使兩個數組內容相同,地址也絕不相同。


三、邊界計算與不對稱邊界

1.經典錯誤①

int main(){	int i = 0; int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };	for (i = 0; i < 13; i++)	{		arr[i] = 0;		printf("haha");	}	return 0;}

計算的結果是程序陷入死循環

分析:1.棧區默認先使用高地址,再使用低地址? 2.數組內元素隨下標增長,地址由低到高變化

?調試后即可發現,i與arr[9]的地址相差3字節,所以i即為實際不存在的arr[12].

[補充知識:ANSI c標準允許這種用法——數組中溢界元素的地址位于數組所占內存之后,這個地址可以進行賦值比較,但是不能解引用(若是數組之前存在溢界則語法不允許)]

2.經典錯誤②

十米長的圍欄每一米就需要一根欄桿支撐,則共需要幾根欄桿?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?11

3、總結

欄桿問題你若不假思索可能會回答為10。欄桿問題的根源正是加減一帶來的困惑

對此我們堅持以下原則

原則一:考慮最簡單的特例(如考慮20到10間有幾個數,20-10還要+1嗎。不妨考慮10到10有幾個數)

原則二:仔細計算邊界

而在實際編程中,一個編程技巧則可以"一言以蔽之",即不對稱邊界。

x>=0 && x<16? 要優于 x>=0 && x<=15

不對稱邊界上界-下界就是之間所包含的數。


四、求值順序

總結:c語言中只有四個運算符(&&||?:)明確規定了求值順序

&&和||先對左邊求值,只在需要時對右邊求值:

if(y!=0 && x/y>a)

如此避免除0錯誤。

特別注意,賦值操作符不保證任何求值順序,即使考慮了優先級和結合性,也會有意想不到的錯誤

int i=0;while(i

對于以上的代碼,就不能確定y是否在i自增之前求值。

問題代碼1:c+--c(我們可以根據"大嘴法"判斷為c+(--c)),但c自增的先后不得而知)

問題代碼2:int a=(++i)+(++i)+(++i)? (同理)

問題代碼3:answer=func()-func()*func()? ? (我們不知道哪個func被先調用)


五、運算符&& ||和!

這三種運算符返回值都為0或1。在結果為真是返回1,結果為假是返回0。

考慮一下代碼,其功能是查詢表中一個特定元素

int i = 0;while (i < tabsize && tab[i] != x){	i++;}

現分析將&&替換成&仍然能"正常工作"的原因。

原因一:只要xy的值都限制在0~1,x&&y和x&y的結果始終相同。

原因二:數組結尾之后的下一個元素,只要不改變他的值而僅僅是讀取,沒有什么大的危害

原因三:不同與&&的求值順序,&要求兩邊都要被求值

如果tabsize大小等于tab中元素的個數,即使i=tabsize后還會繼續查找下去,陷入死循環

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/119671.html

相關文章

  • 只看不敲,神也學不好C---------計算機經典書籍經驗分享

    摘要:學單片機多去官網上查資料,下載手冊,像我入門的單片機經常去官網,還有學的系列板子,公司的官網的官方例程給的很詳細,在英文視角閱讀對你大有益處。 目錄 1.C語言經典 2.單片機系列 3.Python方面 4.嵌入式LWip協議 5.Android 6.C++經典書籍 7.Linux開發 ...

    FleyX 評論0 收藏0
  • C陷阱缺陷》第三章

    摘要:而對于二維數組,因為內存連續性的原因,內存并不會真真的開辟一個二維空間,而是連續依次存入二維數組的每個數據。之所以有二維數組的說法是為了分析問題方便。二維數組的實質是一維數組,只是其元素類型是一維數組類型。 ...

    tyheist 評論0 收藏0
  • 【帶你刷系列】?c陷阱缺陷(一)

    內容介紹 詞法陷阱介紹1 =不同于==2 & 和 | 不同于 && 和 ||3 詞法分析中的貪心法4 整形常量問題5 字符與字符串問題 詞法陷阱介紹 探討符號和組成符號的字符間的關系,以及有關符號含義的一些常見誤解 1 =不同于== =:賦值操作符,將右操作數的值放到左操作數的空間里面。 ==:關系操作符,用來比較左右兩個數,若相等則為1,若不相等則為0。 當 == 寫成 = 的后...

    wpw 評論0 收藏0
  • 軟件測試剛入行必看: 測試基本流程、測試用例全在這里

    摘要:從業務流程上,應得到以下信息主流程是什么條件備選流程是什么數據流向是什么關鍵的判斷條件是什么測試用例設計完成以上兩步則可進行測試用例設計,功能測試用例,應盡量考慮邊界異常性能的情況,以便發現更多的隱藏問題。 為什么測試人員要參加需求分析?也就是進行測試需求分析的目的是什么? 第一、把用戶需求...

    Cristalven 評論0 收藏0
  • 深入理解ES6筆記(十一)代理(Proxy)和反射(Reflection)API(12)

    摘要:是陷阱函數對應的反射方法,同時也是操作的默認行為。對象外形指的是對象已有的屬性與方法的集合,由于該屬性驗證只須在讀取屬性時被觸發,因此只要使用陷阱函數。無論該屬性是對象自身的屬性還是其原型的屬性。 主要知識點:代理和反射的定義、常用的陷阱函數、可被撤銷的代理、將代理對象作為原型使用、將代理作為類的原型showImg(https://segmentfault.com/img/bVbfWr...

    explorer_ddf 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<