亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C語言之陷阱與缺陷詳解

 更新時(shí)間:2021年09月10日 09:12:14   作者:罅隙-  
本片文章是對(duì)C++中陷阱與缺陷進(jìn)行了詳細(xì)的分析介紹,小編覺得本片文章講解的非常詳細(xì),需要的朋友參考下,希望能夠給你帶來幫助

一、前言

二、字符指針

結(jié)論一:復(fù)制指針并不會(huì)復(fù)制指針?biāo)赶虻膬?nèi)容。兩個(gè)指針?biāo)赶蛭恢孟嗤?,?shí)際為同一個(gè)指針。

結(jié)論而:開辟兩個(gè)數(shù)組,即使兩個(gè)數(shù)組內(nèi)容相同,地址也絕不相同。

三、邊界計(jì)算與不對(duì)稱邊界

1.經(jīng)典錯(cuò)誤①

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)增長,地址由低到高變化

 調(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ù)組之前存在溢界則語法不允許)]

2.經(jīng)典錯(cuò)誤②

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

3、小結(jié)

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

對(duì)此我們堅(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語言中只有四個(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<n)
{
    y[i]=x[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)算符&& ||和!

這三種運(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)

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • C語言數(shù)據(jù)結(jié)構(gòu)遞歸之斐波那契數(shù)列

    C語言數(shù)據(jù)結(jié)構(gòu)遞歸之斐波那契數(shù)列

    這篇文章主要介紹了C語言數(shù)據(jù)結(jié)構(gòu)遞歸之斐波那契數(shù)列的相關(guān)資料,希望通過本文能幫助到大家,讓大家理解掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-10-10
  • 用C語言判斷一個(gè)二叉樹是否為另一個(gè)的子結(jié)構(gòu)

    用C語言判斷一個(gè)二叉樹是否為另一個(gè)的子結(jié)構(gòu)

    這篇文章主要介紹了用C語言判斷一個(gè)二叉樹是否為另一個(gè)的子結(jié)構(gòu),是數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)當(dāng)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-08-08
  • C語言實(shí)現(xiàn)餐飲點(diǎn)餐管理系統(tǒng)

    C語言實(shí)現(xiàn)餐飲點(diǎn)餐管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)餐飲點(diǎn)餐管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Qt實(shí)現(xiàn)打地鼠游戲的方法詳解

    Qt實(shí)現(xiàn)打地鼠游戲的方法詳解

    這篇文章主要和大家詳細(xì)介紹了如何利用Qt實(shí)現(xiàn)一個(gè)簡單的打地鼠游戲,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以參考一下
    2022-10-10
  • C語言從基礎(chǔ)到進(jìn)階全面講解數(shù)組

    C語言從基礎(chǔ)到進(jìn)階全面講解數(shù)組

    數(shù)組是一組有序的數(shù)據(jù)的集合,數(shù)組中元素類型相同,由數(shù)組名和下標(biāo)唯一地確定,數(shù)組中數(shù)據(jù)不僅數(shù)據(jù)類型相同,而且在計(jì)算機(jī)內(nèi)存里連續(xù)存放,地址編號(hào)最低的存儲(chǔ)單元存放數(shù)組的起始元素,地址編號(hào)最高的存儲(chǔ)單元存放數(shù)組的最后一個(gè)元素
    2022-05-05
  • C++11智能指針unique_ptr用法使用場景分析

    C++11智能指針unique_ptr用法使用場景分析

    unique_ptr 是 C++ 11 提供的用于防止內(nèi)存泄漏的智能指針中的一種實(shí)現(xiàn),即使在異常發(fā)生時(shí)也可幫助避免資源泄露。這篇文章主要介紹了C++11智能指針unique_ptr用法介紹,需要的朋友可以參考下
    2021-08-08
  • CMake中使用vcpkg的實(shí)現(xiàn)

    CMake中使用vcpkg的實(shí)現(xiàn)

    本文主要介紹了CMake中使用vcpkg的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • 淺析C++ new的三種面貌

    淺析C++ new的三種面貌

    這篇文章主要介紹了C++ new的三種面貌,幫助大家更好的理解和學(xué)習(xí)c++,感興趣的朋友可以了解下
    2020-08-08
  • C++實(shí)現(xiàn)合并排序的方法

    C++實(shí)現(xiàn)合并排序的方法

    這篇文章主要介紹了C++實(shí)現(xiàn)合并排序的方法,實(shí)例分析了合并排序的原理與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2015-07-07
  • Recommended C Style and Coding Standards中文翻譯版

    Recommended C Style and Coding Standards中文翻譯版

    本文翻譯自Recommended C Style and Coding Standards(C語言編碼風(fēng)格和標(biāo)準(zhǔn)),需要的朋友可以參考下
    2014-04-04

最新評(píng)論