摘要:兩個(gè)指針?biāo)赶蛭恢孟嗤?,?shí)際為同一個(gè)指針。四求值順序總結(jié)語(yǔ)言中只有四個(gè)運(yùn)算符,明確規(guī)定了求值順序和先對(duì)左邊求值,只在需要時(shí)對(duì)右邊求值如此避免除錯(cuò)誤。在結(jié)果為真是返回,結(jié)果為假是返回。原因一只要的值都限制在和的結(jié)果始終相同。
目錄
結(jié)論一:復(fù)制指針并不會(huì)復(fù)制指針?biāo)赶虻膬?nèi)容。兩個(gè)指針?biāo)赶蛭恢孟嗤瑢?shí)際為同一個(gè)指針。
結(jié)論而:開辟兩個(gè)數(shù)組,即使兩個(gè)數(shù)組內(nèi)容相同,地址也絕不相同。
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;}
計(jì)算的結(jié)果是程序陷入死循環(huán)
分析:1.棧區(qū)默認(rèn)先使用高地址,再使用低地址? 2.數(shù)組內(nèi)元素隨下標(biāo)增長(zhǎng),地址由低到高變化
?調(diào)試后即可發(fā)現(xiàn),i與arr[9]的地址相差3字節(jié),所以i即為實(shí)際不存在的arr[12].
[補(bǔ)充知識(shí):ANSI c標(biāo)準(zhǔn)允許這種用法——數(shù)組中溢界元素的地址位于數(shù)組所占內(nèi)存之后,這個(gè)地址可以進(jìn)行賦值和比較,但是不能解引用(若是數(shù)組之前存在溢界則語(yǔ)法不允許)]
十米長(zhǎng)的圍欄每一米就需要一根欄桿支撐,則共需要幾根欄桿?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?11
欄桿問題你若不假思索可能會(huì)回答為10。欄桿問題的根源正是加減一帶來的困惑
對(duì)此我們堅(jiān)持以下原則
原則一:考慮最簡(jiǎn)單的特例(如考慮20到10間有幾個(gè)數(shù),20-10還要+1嗎。不妨考慮10到10有幾個(gè)數(shù))
原則二:仔細(xì)計(jì)算邊界
而在實(shí)際編程中,一個(gè)編程技巧則可以"一言以蔽之",即不對(duì)稱邊界。
x>=0 && x<16? 要優(yōu)于 x>=0 && x<=15
不對(duì)稱邊界上界-下界就是之間所包含的數(shù)。
總結(jié):c語(yǔ)言中只有四個(gè)運(yùn)算符(&& ;|| ;?: ;,)明確規(guī)定了求值順序
&&和||先對(duì)左邊求值,只在需要時(shí)對(duì)右邊求值:
if(y!=0 && x/y>a)
如此避免除0錯(cuò)誤。
特別注意,賦值操作符不保證任何求值順序,即使考慮了優(yōu)先級(jí)和結(jié)合性,也會(huì)有意想不到的錯(cuò)誤
int i=0;while(i
對(duì)于以上的代碼,就不能確定y是否在i自增之前求值。
問題代碼1:c+--c(我們可以根據(jù)"大嘴法"判斷為c+(--c)),但c自增的先后不得而知)
問題代碼2:int a=(++i)+(++i)+(++i)? (同理)
問題代碼3:answer=func()-func()*func()? ? (我們不知道哪個(gè)func被先調(diào)用)
這三種運(yùn)算符返回值都為0或1。在結(jié)果為真是返回1,結(jié)果為假是返回0。
考慮一下代碼,其功能是查詢表中一個(gè)特定元素
int i = 0;while (i < tabsize && tab[i] != x){ i++;}
現(xiàn)分析將&&替換成&仍然能"正常工作"的原因。
原因一:只要xy的值都限制在0~1,x&&y和x&y的結(jié)果始終相同。
原因二:數(shù)組結(jié)尾之后的下一個(gè)元素,只要不改變他的值而僅僅是讀取,沒有什么大的危害
原因三:不同與&&的求值順序,&要求兩邊都要被求值
如果tabsize大小等于tab中元素的個(gè)數(shù),即使i=tabsize后還會(huì)繼續(xù)查找下去,陷入死循環(huán)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/119671.html
摘要:學(xué)單片機(jī)多去官網(wǎng)上查資料,下載手冊(cè),像我入門的單片機(jī)經(jīng)常去官網(wǎng),還有學(xué)的系列板子,公司的官網(wǎng)的官方例程給的很詳細(xì),在英文視角閱讀對(duì)你大有益處。 目錄 1.C語(yǔ)言經(jīng)典 2.單片機(jī)系列 3.Python方面 4.嵌入式LWip協(xié)議 5.Android 6.C++經(jīng)典書籍 7.Linux開發(fā) ...
摘要:而對(duì)于二維數(shù)組,因?yàn)閮?nèi)存連續(xù)性的原因,內(nèi)存并不會(huì)真真的開辟一個(gè)二維空間,而是連續(xù)依次存入二維數(shù)組的每個(gè)數(shù)據(jù)。之所以有二維數(shù)組的說法是為了分析問題方便。二維數(shù)組的實(shí)質(zhì)是一維數(shù)組,只是其元素類型是一維數(shù)組類型。 ...
內(nèi)容介紹 詞法陷阱介紹1 =不同于==2 & 和 | 不同于 && 和 ||3 詞法分析中的貪心法4 整形常量問題5 字符與字符串問題 詞法陷阱介紹 探討符號(hào)和組成符號(hào)的字符間的關(guān)系,以及有關(guān)符號(hào)含義的一些常見誤解 1 =不同于== =:賦值操作符,將右操作數(shù)的值放到左操作數(shù)的空間里面。 ==:關(guān)系操作符,用來比較左右兩個(gè)數(shù),若相等則為1,若不相等則為0。 當(dāng) == 寫成 = 的后...
摘要:從業(yè)務(wù)流程上,應(yīng)得到以下信息主流程是什么條件備選流程是什么數(shù)據(jù)流向是什么關(guān)鍵的判斷條件是什么測(cè)試用例設(shè)計(jì)完成以上兩步則可進(jìn)行測(cè)試用例設(shè)計(jì),功能測(cè)試用例,應(yīng)盡量考慮邊界異常性能的情況,以便發(fā)現(xiàn)更多的隱藏問題。 為什么測(cè)試人員要參加需求分析?也就是進(jìn)行測(cè)試需求分析的目的是什么? 第一、把用戶需求...
摘要:是陷阱函數(shù)對(duì)應(yīng)的反射方法,同時(shí)也是操作的默認(rèn)行為。對(duì)象外形指的是對(duì)象已有的屬性與方法的集合,由于該屬性驗(yàn)證只須在讀取屬性時(shí)被觸發(fā),因此只要使用陷阱函數(shù)。無(wú)論該屬性是對(duì)象自身的屬性還是其原型的屬性。 主要知識(shí)點(diǎn):代理和反射的定義、常用的陷阱函數(shù)、可被撤銷的代理、將代理對(duì)象作為原型使用、將代理作為類的原型showImg(https://segmentfault.com/img/bVbfWr...
閱讀 897·2023-04-26 00:11
閱讀 2689·2021-11-04 16:13
閱讀 2148·2021-09-09 09:33
閱讀 1507·2021-08-20 09:35
閱讀 3887·2021-08-09 13:42
閱讀 3637·2019-08-30 15:55
閱讀 1128·2019-08-30 15:55
閱讀 2254·2019-08-30 13:55