版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
最新卓越管理方案您可自由編輯2.1空行152.2代碼行162.3代碼行內(nèi)的空格17品質(zhì)管理品質(zhì)知識(shí)高質(zhì)量編程2.5長(zhǎng)行拆分192.6修飾符的位置192.7注釋202.8類的版式21第3章命名規(guī)則223.1共性規(guī)則223.2簡(jiǎn)單的WINDOWS應(yīng)用程序命名規(guī)則23感謝閱讀3.3簡(jiǎn)單的UNIX應(yīng)用程序命名規(guī)則25第4章表達(dá)式和基本語句264.1運(yùn)算符的優(yōu)先級(jí)264.2復(fù)合表達(dá)式274.3IF語句274.4循環(huán)語句的效率294.5FOR語句的循環(huán)控制變量304.6SWITCH語句304.7GOTO語句31第5章常量335.1為什么需要常量335.2CONST與#DEFINE的比較335.3常量定義規(guī)則335.4類中的常量34第6章函數(shù)設(shè)計(jì)366.1參數(shù)的規(guī)則366.2返回值的規(guī)則376.3函數(shù)內(nèi)部實(shí)現(xiàn)的規(guī)則396.4其它建議406.5使用斷言416.6引用與指針的比較42第7章內(nèi)存管理447.1內(nèi)存分配方式447.2常見的內(nèi)存錯(cuò)誤及其對(duì)策447.3指針與數(shù)組的對(duì)比457.4指針參數(shù)是如何傳遞內(nèi)存的?477.5FREE和DELETE把指針怎么啦?50精品文檔放心下載7.6動(dòng)態(tài)內(nèi)存會(huì)被自動(dòng)釋放嗎?507.7杜絕“野指針”517.8有了MALLOC/FREE為什么還要NEW/DELETE?52謝謝閱讀7.9內(nèi)存耗盡怎么辦?537.10MALLOC/FREE的使用要點(diǎn)547.11NEW/DELETE的使用要點(diǎn)557.12一些心得體會(huì)56第8章C++函數(shù)的高級(jí)特性578.1函數(shù)重載的概念578.2成員函數(shù)的重載、覆蓋與隱藏608.3參數(shù)的缺省值638.4運(yùn)算符重載648.5函數(shù)內(nèi)聯(lián)658.6一些心得體會(huì)68第9章類的構(gòu)造函數(shù)、析構(gòu)函數(shù)與賦值函數(shù)699.1構(gòu)造函數(shù)與析構(gòu)函數(shù)的起源699.2構(gòu)造函數(shù)的初始化表709.3構(gòu)造和析構(gòu)的次序729.4示例:類STRING的構(gòu)造函數(shù)與析構(gòu)函數(shù)72精品文檔放心下載9.5不要輕視拷貝構(gòu)造函數(shù)與賦值函數(shù)739.6示例:類STRING的拷貝構(gòu)造函數(shù)與賦值函數(shù)73謝謝閱讀9.7偷懶的辦法處理拷貝構(gòu)造函數(shù)與賦值函數(shù)759.8如何在派生類中實(shí)現(xiàn)類的基本函數(shù)759.9一些心得體會(huì)77第10章類的繼承與組合7810.1繼承7810.2組合80第11章其它編程經(jīng)驗(yàn)8211.1使用CONST提高函數(shù)的健壯性8211.2提高程序的效率8411.3一些有益的建議85參考文獻(xiàn)87附錄A:C++/C代碼審查表88附錄B:C++/C試題93附錄C:C++/C試題的答案與評(píng)分標(biāo)準(zhǔn)97前言軟件質(zhì)量是被大多數(shù)程序員掛在嘴上而不是放在心上的東西!謝謝閱讀感謝閱讀的C++/C程序怎么會(huì)有那么多的毛病?”別難過,作者只不過比你早幾年、多幾次驚慌而已。請(qǐng)花一兩個(gè)小時(shí)認(rèn)真閱讀這本百頁(yè)經(jīng)書,你將會(huì)獲益匪淺,這是前面N-1個(gè)讀者的建議。精品文檔放心下載一、編程老手與高手的誤區(qū)感謝閱讀為毛病特多卻常能自我臭美的群體。如今在Internet上流傳的“真正”的程序員據(jù)說是這樣的:精品文檔放心下載(1)真正的程序員沒有進(jìn)度表,只有討好領(lǐng)導(dǎo)的馬屁精才有進(jìn)度表,真正的程序員會(huì)讓領(lǐng)導(dǎo)感謝閱讀提心吊膽。(2)真正的程序員不寫使用說明書,用戶應(yīng)當(dāng)自己去猜想程序的功能。謝謝閱讀(3)真正的程序員幾乎不寫代碼的注釋,如果注釋很難寫,它理所當(dāng)然也很難讀。謝謝閱讀(4)真正的程序員不畫流程圖,原始人和文盲才會(huì)干這事。感謝閱讀(5)真正的程序員不看參考手冊(cè),新手和膽小鬼才會(huì)看。精品文檔放心下載(6)真正的程序員不寫文檔也不需要文檔,只有看不懂程序的笨蛋才用文檔。感謝閱讀(7)真正的程序員認(rèn)為自己比用戶更明白用戶需要什么。感謝閱讀(8)真正的程序員不接受團(tuán)隊(duì)開發(fā)的理念,除非他自己是頭頭。感謝閱讀(9)30小謝謝閱讀時(shí)的調(diào)試改錯(cuò)。(10)真正的程序員不會(huì)在上午9:00到下午5:009:00工作,感謝閱讀這表明他從昨晚一直干到現(xiàn)在?!x謝閱讀謝謝閱讀我曾經(jīng)也這樣信奉,并且希望自己成為那樣的“真正”的程序員,結(jié)果沒有得到好下場(chǎng)。感謝閱讀我從讀大學(xué)到博士畢業(yè)十年來一直勤奮好學(xué),累計(jì)編寫了數(shù)十萬行C++/C謝謝閱讀勞和疲勞,我應(yīng)該稱得上是編程老手了吧?CAD和3D精品文檔放心下載難度頗高。這些軟件頻頻獲獎(jiǎng),有一個(gè)軟件獲得首屆中國(guó)大學(xué)生電腦大賽軟件展示一等獎(jiǎng)。謝謝閱讀在1995年開發(fā)的一套圖形軟件庫(kù)到2000年還有人買。羅列出這些“業(yè)績(jī),可以說明我算精品文檔放心下載得上是編程高手了吧?可惜這種個(gè)人感覺不等于事實(shí)。讀博期間我曾用一年時(shí)間開發(fā)了一個(gè)近10萬行C++代碼的3D圖形軟件產(chǎn)品,我內(nèi)心得意表感謝閱讀面謙虛地向一位真正的軟件高手請(qǐng)教。他雖然從未涉足過3D圖形領(lǐng)域,卻在幾十分鐘內(nèi)指感謝閱讀精品文檔放心下載感謝閱讀己的軟件公司。人的頓悟通常發(fā)生在最心痛的時(shí)刻,在沮喪和心痛之后,我作了深刻反省,“面壁”半年,謝謝閱讀感謝閱讀我曾到微軟中國(guó)研究院找工作,接受微軟公司一位資深軟件工程師的面試。他讓我寫函數(shù)感謝閱讀strcpy的代碼。太容易了吧?錯(cuò)!這么一個(gè)小不點(diǎn)的函數(shù),他從三個(gè)方面考查:(1)編程風(fēng)格;(2)出錯(cuò)處理;(3精品文檔放心下載滿意,讓我回家好好琢磨。我精神抖擻地進(jìn)“考場(chǎng),大汗淋漓地出“考場(chǎng)。這“高手當(dāng)謝謝閱讀得也太窩囊了。我又好好地反省了一次。感謝閱讀幸和國(guó)產(chǎn)大型IT企業(yè)如華為、上海貝爾、中興等公司的同志們廣泛交流。大家認(rèn)為提高質(zhì)謝謝閱讀精品文檔放心下載靠編程來實(shí)現(xiàn)的。我們心目中的老手們和高手們能否編寫出高質(zhì)量的程序來?感謝閱讀不見得都能!精品文檔放心下載感謝閱讀吃盡苦頭之后才有一些心得體會(huì),長(zhǎng)進(jìn)極慢,我就是一例。謝謝閱讀現(xiàn)在國(guó)內(nèi)IT企業(yè)擁有學(xué)士、碩士、博士文憑的軟件開發(fā)人員比比皆是,但他們?cè)诮邮艽髮W(xué)感謝閱讀教育時(shí)就“先天不足,豈能一到企業(yè)就突然實(shí)現(xiàn)質(zhì)的飛躍。試問有多少軟件開發(fā)人員對(duì)正感謝閱讀精品文檔放心下載性、可移植性等質(zhì)量屬性了如指掌?并且能在實(shí)踐中運(yùn)用自如??!案哔|(zhì)量”可不是干活小謝謝閱讀心點(diǎn)就能實(shí)現(xiàn)的!我們有充分的理由疑慮:(1精品文檔放心下載是真的?。?)編程高手可以在某一領(lǐng)域?qū)懗鰳O有水平的代碼,但未必能從全局把握軟件質(zhì)量的方方精品文檔放心下載面面。事實(shí)證明如此。我到上海貝爾工作一年來,陸續(xù)面試或測(cè)試過近百名“新老”程序員的精品文檔放心下載編程技能,質(zhì)量合格率大約是10%。很少有人能夠?qū)懗鐾耆腺|(zhì)量要求的if語句,很多精品文檔放心下載程序員對(duì)指針、內(nèi)存管理一知半解,……。領(lǐng)導(dǎo)們不敢相信這是真的。我做過現(xiàn)場(chǎng)試驗(yàn):有一次部門新進(jìn)14名碩士生,在開歡迎會(huì)之感謝閱讀前對(duì)他們進(jìn)行“C++/C編程技能”摸底考試。我問大家試題難不難?所有的人都回答不難。謝謝閱讀精品文檔放心下載真的不是我“心狠手辣”或者要求過高,而是很多軟件開發(fā)人員對(duì)自己的要求不夠高。精品文檔放心下載要知道華為、上海貝爾、中興等公司的員工素質(zhì)在國(guó)內(nèi)IT企業(yè)中是比較前列的,倘若他們精品文檔放心下載謝謝閱讀還談什么振興民族軟件產(chǎn)業(yè),豈不胡扯。我打算定義編程老手和編程高手,請(qǐng)您別見笑。定義1:能長(zhǎng)期穩(wěn)定地編寫出高質(zhì)量程序的程序員稱為編程老手。謝謝閱讀定義2:能長(zhǎng)期穩(wěn)定地編寫出高難度、高質(zhì)量程序的程序員稱為編程高手。謝謝閱讀根據(jù)上述定義,馬上得到第一推論:我既不是高手也算不上是老手。感謝閱讀謝謝閱讀精品文檔放心下載國(guó)內(nèi)土生土長(zhǎng)的程序員朋友們能夠做到:(1)知錯(cuò)就改;(2)經(jīng)常溫故而知新;(3)堅(jiān)持學(xué)習(xí),天天向上。二、本書導(dǎo)讀首先請(qǐng)做附錄B的C++/C謝謝閱讀案嚴(yán)格打分。(1)如果你只得了幾十分,請(qǐng)不要聲張,也不要太難過。編程質(zhì)量差往往是由于不良習(xí)慣精品文檔放心下載精品文檔放心下載感謝閱讀第二次考試就能及格了。(2)如果你考及格了,表明你的技術(shù)基礎(chǔ)不錯(cuò),希望你能虛心學(xué)習(xí)、不斷進(jìn)步。如果你還精品文檔放心下載沒有找到合適的工作單位,不妨到上海貝爾試一試。(3)如果你考出85分以上的好成績(jī),你有義務(wù)和資格為你所在的團(tuán)隊(duì)作“C++/C編程”培謝謝閱讀精品文檔放心下載小組來。(4)如果你在沒有任何提示的情況下考了滿分,希望你能收我做你的徒弟。謝謝閱讀編程考試結(jié)束后,請(qǐng)閱讀本書的正文。本書第一章至第六章主要論述C++/C謝謝閱讀感謝閱讀感謝閱讀謝謝閱讀寫字潦草,如果不改正,總有后悔的時(shí)候。編程也是同樣道理。精品文檔放心下載感謝閱讀管理精品文檔放心下載指針Bug,精品文檔放心下載想不到又是“野指針”出問題,只好重讀第七章。光看本書對(duì)提高編程質(zhì)量是有限的,建議大家閱讀本書的參考文獻(xiàn),那些都是經(jīng)典名著。感謝閱讀謝謝閱讀閱讀并按照CMMI規(guī)范做事,讓自己的綜合水平上升一個(gè)臺(tái)階。上海貝爾的員工可以向網(wǎng)絡(luò)精品文檔放心下載應(yīng)用事業(yè)部軟件工程研究小組索取CMMI有關(guān)資料,最好能參加培訓(xùn)。謝謝閱讀三、版權(quán)聲明精品文檔放心下載絡(luò)應(yīng)用事業(yè)部的一個(gè)規(guī)范化文件,同時(shí)作為培訓(xùn)教材。由于C++/C精品文檔放心下載也是這么學(xué)來的。作者愿意公開本書的電子文檔。版權(quán)聲明如下:(1)讀者可以任意拷貝、修改本書的內(nèi)容,但不可以篡改作者及所屬單位。感謝閱讀(2)未經(jīng)作者許可,不得出版或大量印發(fā)本書。(3)如果競(jìng)爭(zhēng)對(duì)手公司的員工得到本書,請(qǐng)勿公開使用,以免發(fā)生糾紛。感謝閱讀預(yù)計(jì)到2002年7月,我們將建立切合中國(guó)國(guó)情的CMMI3級(jí)解決方案。屆時(shí),包括本書在內(nèi)感謝閱讀的約1000頁(yè)規(guī)范將嚴(yán)格受控。歡迎讀者對(duì)本書提出批評(píng)建議。林銳,2001年7月第1章文件結(jié)構(gòu)每個(gè)C++/Cdeclaration感謝閱讀文件。另一個(gè)文件用于保存程序的實(shí)現(xiàn)(implementationdefinition感謝閱讀C++/C程序的頭文件以“為后綴,C程序的定義文件以“為后綴,C++程序的定義文精品文檔放心下載件通常以“.cpp”為后綴(也有一些系統(tǒng)以“.cc”或“.cxx感謝閱讀1.1版權(quán)和版本的聲明版權(quán)和版本的聲明位于頭文件和定義文件的開頭(參見示例1-1感謝閱讀(1)版權(quán)信息。(2)文件名稱,標(biāo)識(shí)符,摘要。(3)當(dāng)前版本號(hào),作者/修改者,完成日期。(4)版本歷史信息。/**Copyright(c)2001,上海貝爾有限公司網(wǎng)絡(luò)應(yīng)用事業(yè)部精品文檔放心下載*Allrightsreserved.**文件名稱:filename.h*文件標(biāo)識(shí):見配置管理計(jì)劃書*摘要:簡(jiǎn)要描述本文件的內(nèi)容**當(dāng)前版本:1.1*作者:輸入作者(或修改者)名字*完成日期:2001年7月20日**取代版本:1.0*原作者:輸入原作者(或修改者)名字*完成日期:2001年5月10日*/示例1-1版權(quán)和版本的聲明1.2頭文件的結(jié)構(gòu)頭文件由三部分內(nèi)容組成:(1)頭文件開頭處的版權(quán)和版本聲明(參見示例1-1謝謝閱讀(2)預(yù)處理塊。(3)函數(shù)和類結(jié)構(gòu)聲明等。假設(shè)頭文件名稱為graphics.h,頭文件的結(jié)構(gòu)參見示例1-2。謝謝閱讀【規(guī)則1-2-1】為了防止頭文件被重復(fù)引用,應(yīng)當(dāng)用ifndefendif結(jié)構(gòu)產(chǎn)生預(yù)處理塊。精品文檔放心下載【規(guī)則1-2-2#include<filename.h>精品文檔放心下載【規(guī)則1-2-3格式來引用非標(biāo)準(zhǔn)庫(kù)的頭文件(編譯器將從用戶精品文檔放心下載【建議1-2-1】頭文件中只存放“聲明”而不存放“定義”謝謝閱讀在C++語法中,類的成員函數(shù)可以在聲明的同時(shí)被定義,并且自動(dòng)成為內(nèi)聯(lián)函數(shù)。這雖然會(huì)謝謝閱讀謝謝閱讀不論該函數(shù)體有多么小。【建議1-2-2】不提倡使用全局變量,盡量不要在頭文件中出現(xiàn)象externintvalue這類聲感謝閱讀明。//版權(quán)和版本聲明見示例1-1,此處省略。#ifndefGRAPHICS_H//防止graphics.h被重復(fù)引用感謝閱讀#defineGRAPHICS_H#include<math.h>//引用標(biāo)準(zhǔn)庫(kù)的頭文件精品文檔放心下載…#include“myheader.h”//引用非標(biāo)準(zhǔn)庫(kù)的頭文件精品文檔放心下載…voidFunction1(…);//全局函數(shù)聲明…classBox//類結(jié)構(gòu)聲明{…};#endif示例1-2C++/C頭文件的結(jié)構(gòu)1.3定義文件的結(jié)構(gòu)定義文件有三部分內(nèi)容:(1)定義文件開頭處的版權(quán)和版本聲明(參見示例1-1精品文檔放心下載(2)對(duì)一些頭文件的引用。(3假設(shè)定義文件的名稱為,定義文件的結(jié)構(gòu)參見示例1-3。精品文檔放心下載//版權(quán)和版本聲明見示例1-1,此處省略。#include“graphics.h”//引用頭文件精品文檔放心下載…//全局函數(shù)的實(shí)現(xiàn)體voidFunction1(…){…}//類成員函數(shù)的實(shí)現(xiàn)體voidBox::Draw(…){…}示例1-3C++/C定義文件的結(jié)構(gòu)1.4頭文件的作用早期的編程語言如BasicFortran沒有頭文件的概念,C++/C語言的初學(xué)者雖然會(huì)用使用頭精品文檔放心下載文件,但常常不明其理。這里對(duì)頭文件的作用略作解釋:(1)通過頭文件來調(diào)用庫(kù)功能。在很多場(chǎng)合,源代碼不便(或不準(zhǔn))向用戶公布,只要向精品文檔放心下載感謝閱讀不必關(guān)心接口怎么實(shí)現(xiàn)的。編譯器會(huì)從庫(kù)中提取相應(yīng)的代碼。感謝閱讀(2)頭文件能加強(qiáng)類型安全檢查。如果某個(gè)接口被實(shí)現(xiàn)或被使用時(shí),其方式與頭文件中的精品文檔放心下載聲明不一致,編譯器就會(huì)指出錯(cuò)誤,這一簡(jiǎn)單的規(guī)則能大大減輕程序員調(diào)試、改錯(cuò)的負(fù)擔(dān)。感謝閱讀1.5目錄結(jié)構(gòu)精品文檔放心下載不同的目錄,以便于維護(hù)。例如可將頭文件保存于include目錄,將定義文件保存于source精品文檔放心下載如果某些頭文件是私有的,它不會(huì)被用戶的程序直接引用,則沒有必要公開其“聲明。為感謝閱讀了加強(qiáng)信息隱藏,這些私有的頭文件可以和定義文件存放于同一個(gè)目錄。謝謝閱讀第2章程序的版式謝謝閱讀的重要構(gòu)成因素??梢园殉绦虻陌媸奖扔鳛椤皶ā:玫摹皶ā笨勺屓藢?duì)程序一目了然,看得興致勃勃。謝謝閱讀差的程序“書法如螃蟹爬行,讓人看得索然無味,更令維護(hù)者煩惱有加。請(qǐng)程序員們學(xué)習(xí)謝謝閱讀程序的“書法,彌補(bǔ)大學(xué)計(jì)算機(jī)教育的漏洞,實(shí)在很有必要。感謝閱讀2.1空行感謝閱讀謝謝閱讀得用空行?!疽?guī)則2-1-12-1(a)感謝閱讀【規(guī)則2-1-2謝謝閱讀分隔。參見示例2-1(b)//空行voidFunction1(…){…}//空行voidFunction2(…){…}//空行voidFunction3(…){…}//空行while(condition){statement1;//空行if(condition){statement2;}else{statement3;}//空行statement4;}示例2-1(a)函數(shù)之間的空行示例2-1(b)函數(shù)內(nèi)部的空行謝謝閱讀2.2代碼行【規(guī)則2-2-1謝謝閱讀容易閱讀,并且方便于寫注釋?!疽?guī)則2-2-2】if、for、while、do等語句自占一行,執(zhí)行語句不得緊跟其后。不論執(zhí)行感謝閱讀語句有多少都要加{}。這樣可以防止書寫失誤。示例2-2(a)為風(fēng)格良好的代碼行,示例2-2(b)為風(fēng)格不良的代碼行。精品文檔放心下載intwidth;//寬度intheight;//高度intdepth;//深度intwidth,height,depth;//寬度高度深度謝謝閱讀x=a+b;y=c+d;z=e+f;X=a+b;y=c+d;z=e+f;if(width<height){dosomething();}if(width<height)dosomething();精品文檔放心下載for(initialization;condition;update)感謝閱讀{dosomething();}//空行other();for(initialization;condition;update)謝謝閱讀dosomething();other();示例2-2(a)風(fēng)格良好的代碼行示例2-2(b)風(fēng)格不良的代碼行謝謝閱讀【建議2-2-1】盡可能在定義變量的同時(shí)初始化該變量(就近原則)精品文檔放心下載感謝閱讀始化的變量,可能會(huì)導(dǎo)致程序錯(cuò)誤。本建議可以減少隱患。例如感謝閱讀intwidth=10;//定義并初紿化width精品文檔放心下載intheight=10;//定義并初紿化height感謝閱讀intdepth=10;//定義并初紿化depth感謝閱讀2.3代碼行內(nèi)的空格【規(guī)則2-3-1】關(guān)鍵字之后要留空格。象const、virtual、inline、case等關(guān)鍵字之后至感謝閱讀少要留一個(gè)空格,否則無法辨析關(guān)鍵字。象if、for、while等關(guān)鍵字之后應(yīng)留一個(gè)空格再感謝閱讀跟左括號(hào)‘(,以突出關(guān)鍵字。【規(guī)則2-3-2】函數(shù)名之后不要留空格,緊跟左括號(hào)‘(,以與關(guān)鍵字區(qū)別。感謝閱讀【規(guī)則2-3-3‘‘‘;’向前緊跟,緊跟處不留空格。精品文檔放心下載【規(guī)則2-3-4‘之后要留空格,如Function(x,y,z)。如果‘不是一行的結(jié)束符號(hào),精品文檔放心下載其后要留空格,如for(initialization;condition;update)。精品文檔放心下載【規(guī)則2-3-5】賦值操作符、比較操作符、算術(shù)操作符、邏輯操作符、位域操作符,如感謝閱讀“=”“<=”“+”“*”“%”“&&”“||”等二元操作符的前后感謝閱讀應(yīng)當(dāng)加空格?!疽?guī)則2-3-6“!”“~”“++”“--”“&”感謝閱讀【規(guī)則2-3-7】象“[]“.”“->”這類操作符前后不加空格。感謝閱讀【建議2-3-1】對(duì)于表達(dá)式比較長(zhǎng)的for語句和if語句,為了緊湊起見可以適當(dāng)?shù)厝サ粢痪肺臋n放心下載些空格,如for(i=0;i<10;i++)和if((a<=b)&&(c<=d))感謝閱讀voidFunc1(intx,inty,intz);//良好的風(fēng)格謝謝閱讀voidFunc1(intx,inty,intz);//不良的風(fēng)格感謝閱讀if(year>=2000)//良好的風(fēng)格if(year>=2000)//不良的風(fēng)格if((a>=b)&&(c<=d))//良好的風(fēng)格if(a>=b&&c<=d)//不良的風(fēng)格for(i=0;i<10;i++)//良好的風(fēng)格for(i=0;i<10;i++)//不良的風(fēng)格for(i=0;I<10;i++)//過多的空格x=a<b?a:b;//良好的風(fēng)格x=a<b?a:b;//不好的風(fēng)格int*x=&y;//良好的風(fēng)格int*x=&y;//不良的風(fēng)格array[5]=0;//不要寫成array[5]=0;精品文檔放心下載a.Function();//不要寫成a.Function();感謝閱讀b->Function();//不要寫成b->Function();謝謝閱讀示例2-3代碼行內(nèi)的空格2.4對(duì)齊【規(guī)則2-4-1{’和‘}’應(yīng)獨(dú)占一行并且位于同一列,同時(shí)與引用它們的精品文檔放心下載語句左對(duì)齊?!疽?guī)則2-4-2】{}之內(nèi)的代碼塊在‘{’右邊數(shù)格處左對(duì)齊。謝謝閱讀示例2-4(a)為風(fēng)格良好的對(duì)齊,示例2-4(b)為風(fēng)格不良的對(duì)齊。精品文檔放心下載voidFunction(intx){…//programcode}voidFunction(intx){…//programcode}if(condition){…//programcode}else{…//programcode}if(condition){…//programcode}else{…//programcode}for(initialization;condition;update)感謝閱讀{…//programcode}for(initialization;condition;update){謝謝閱讀…//programcode}While(condition){…//programcode}while(condition){…//programcode}{…{…}…}示例2-4(a)風(fēng)格良好的對(duì)齊示例2-4(b)風(fēng)格不良的對(duì)齊精品文檔放心下載2.5長(zhǎng)行拆分【規(guī)則2-5-170至80精品文檔放心下載看不過來,也不便于打印。【規(guī)則2-5-2謝謝閱讀謝謝閱讀if((very_longer_variable1>=very_longer_variable12)感謝閱讀&&(very_longer_variable3<=very_longer_variable14)感謝閱讀&&(very_longer_variable5<=very_longer_variable16))謝謝閱讀{dosomething();}virtualCMatrixCMultiplyMatrix(CMatrixleftMatrix,謝謝閱讀CMatrixrightMatrix);for(very_longer_initialization;精品文檔放心下載very_longer_condition;very_longer_update){dosomething();}示例2-5長(zhǎng)行的拆分2.6修飾符的位置修飾符*和&應(yīng)該靠近數(shù)據(jù)類型還是該靠近變量名,是個(gè)有爭(zhēng)議的活題。謝謝閱讀若將修飾符*靠近數(shù)據(jù)類型,例如:int*x;從語義上講此寫法比較直觀,即x是int類型的謝謝閱讀指針。int*x,y;此處y容易被誤解為指針變量。雖然將x感謝閱讀和y分行定義可以避免誤解,但并不是人人都愿意這樣做。謝謝閱讀【規(guī)則2-6-1】應(yīng)當(dāng)將修飾符*和&緊靠變量名例如:char*name;int*x,y;//此處y不會(huì)被誤解為指針2.7注釋C“/*…*/”C++“/*…*/”精品文檔放心下載“//…”。注釋通常用于:(1)版本、版權(quán)聲明;(2)函數(shù)接口說明;(3)重要的代碼行或段落提示。雖然注釋有助于理解代碼,但注意不可過多地使用注釋。參見示例2-6。精品文檔放心下載【規(guī)則2-7-1】注釋是對(duì)代碼的“提示,而不是文檔。程序中的注釋不可喧賓奪主,注釋感謝閱讀太多了會(huì)讓人眼花繚亂。注釋的花樣要少。【規(guī)則2-7-2感謝閱讀i++;//i加1,多余的注釋【規(guī)則2-7-3精品文檔放心下載性。不再有用的注釋要?jiǎng)h除。【規(guī)則2-7-4】注釋應(yīng)當(dāng)準(zhǔn)確、易懂,防止注釋有二義性。錯(cuò)誤的注釋不但無益反而有害。謝謝閱讀【規(guī)則2-7-5】盡量避免在注釋中使用縮寫,特別是不常用縮寫。精品文檔放心下載【規(guī)則2-7-6精品文檔放心下載下方。【規(guī)則2-7-8精品文檔放心下載于閱讀。/**函數(shù)介紹:*輸入?yún)?shù):*輸出參數(shù):*返回值:*/voidFunction(floatx,floaty,floatz)謝謝閱讀{…}if(…){…while(…){…}//endofwhile…}//endofif示例2-6程序的注釋2.8類的版式類可以將數(shù)據(jù)和函數(shù)封裝在一起,其中函數(shù)表示了類的行為(或稱服務(wù))。類提供關(guān)鍵字謝謝閱讀public、protected和private,分別用于聲明哪些數(shù)據(jù)和函數(shù)是公有的、受保護(hù)的或者是精品文檔放心下載精品文檔放心下載其它一切內(nèi)容。我們不可以濫用類的封裝功能,不要把它當(dāng)成火鍋,什么東西都往里扔。感謝閱讀類的版式主要有兩種方式:(1privatepublic8-3(a精品文檔放心下載采用這種版式的程序員主張類的設(shè)計(jì)“以數(shù)據(jù)為中心,重點(diǎn)關(guān)注類的內(nèi)部結(jié)構(gòu)。感謝閱讀(2)將public類型的函數(shù)寫在前面,而將private類型的數(shù)據(jù)寫在后面,如示例8.3(b)精品文檔放心下載采用這種版式的程序員主張類的設(shè)計(jì)“以行為為中心,重點(diǎn)關(guān)注的是類應(yīng)該提供什么樣的謝謝閱讀很多C++教課書受到BiarneStroustrup感謝閱讀心”的書寫方式,并不見得有多少道理。我建議讀者采用“以行為為中心的書寫方式,即首先考慮類應(yīng)該提供什么樣的函數(shù)。這是精品文檔放心下載很多人的經(jīng)驗(yàn)——感謝閱讀最關(guān)心的是接口,誰愿意先看到一堆私有數(shù)據(jù)成員!”classA{private:inti,j;floatx,y;…public:voidFunc1(void);voidFunc2(void);…}classA{public:voidFunc1(void);voidFunc2(void);…private:inti,j;floatx,y;…}示例8.3(a)以數(shù)據(jù)為中心版式示例8.3(b)以行為為中心的版式精品文檔放心下載第3章命名規(guī)則比較著名的命名規(guī)則當(dāng)推Microsoft公司的“匈牙利法,該命名規(guī)則的主要思想是“在變謝謝閱讀量和函數(shù)名中加入前綴以增進(jìn)人們對(duì)程序的理解ch謝謝閱讀是指針變量則追加前綴p。如果一個(gè)變量由ppch開頭,則表明它是指向字符指針的指針。謝謝閱讀“匈牙利”法最大的缺點(diǎn)是煩瑣,例如inti,j,k;floatx,y,z;倘若采用“匈牙利”命名規(guī)則,則應(yīng)當(dāng)寫成intiI,iJ,ik;//前綴i表示int類型謝謝閱讀floatfX,fY,fZ;//前綴f表示float類型謝謝閱讀如此煩瑣的程序會(huì)讓絕大多數(shù)程序員無法忍受。謝謝閱讀則。命名規(guī)則對(duì)軟件產(chǎn)品而言并不是“成敗悠關(guān)的事,我們不要化太多精力試圖發(fā)明世界謝謝閱讀謝謝閱讀施。3.1共性規(guī)則謝謝閱讀擴(kuò)充特定的規(guī)則,如3.2節(jié)?!疽?guī)則3-1-1】標(biāo)識(shí)符應(yīng)當(dāng)直觀且可以拼讀,可望文知意,不必進(jìn)行“解碼。謝謝閱讀精品文檔放心下載英文單詞一般不會(huì)太復(fù)雜,用詞應(yīng)當(dāng)準(zhǔn)確。例如不要把CurrentValue寫成NowValue。感謝閱讀【規(guī)則3-1-2】標(biāo)識(shí)符的長(zhǎng)度應(yīng)當(dāng)符合“min-length&&max-information”原則。謝謝閱讀幾十年前老ANSIC規(guī)定名字不準(zhǔn)超過6C++/C精品文檔放心下載謝謝閱讀否越長(zhǎng)約好?不見得!例如變量名maxval就比maxValueUntilOverflow謝謝閱讀也是有用的,常見的如i,j,k,m,n,x,y,z等,它們通常可用作函數(shù)內(nèi)的局部變量。謝謝閱讀【規(guī)則3-1-3】命名規(guī)則盡量與所采用的操作系統(tǒng)或開發(fā)工具的風(fēng)格保持一致。謝謝閱讀例如Windows應(yīng)用程序的標(biāo)識(shí)符通常采用“大小寫”混排的方式,如AddChild。而Unix應(yīng)謝謝閱讀用程序的標(biāo)識(shí)符通常采用“小寫加下劃線”的方式,如add_child。別把這兩類風(fēng)格混在一精品文檔放心下載起用?!疽?guī)則3-1-4】程序中不要出現(xiàn)僅靠大小寫區(qū)分的相似的標(biāo)識(shí)符。感謝閱讀例如:intx,X;//變量x與X容易混淆voidfoo(intx);//函數(shù)foo與FOO容易混淆謝謝閱讀voidFOO(floatx);【規(guī)則3-1-5精品文檔放心下載不同而不會(huì)發(fā)生語法錯(cuò)誤,但會(huì)使人誤解。【規(guī)則3-1-6】變量的名字應(yīng)當(dāng)使用“名詞”或者“形容詞+名詞。精品文檔放心下載例如:floatvalue;floatoldValue;floatnewValue;【規(guī)則3-1-7或者“動(dòng)詞+名詞謝謝閱讀員函數(shù)應(yīng)當(dāng)只使用“動(dòng)詞,被省略掉的名詞就是對(duì)象本身。謝謝閱讀例如:DrawBox();//全局函數(shù)box->Draw();//類的成員函數(shù)【規(guī)則3-1-8】用正確的反義詞組命名具有互斥意義的變量或相反動(dòng)作的函數(shù)等。精品文檔放心下載例如:intminValue;intmaxValue;intSetValue(…);intGetValue(…);【建議3-1-1Value1,Value2精品文檔放心下載謝謝閱讀3.2簡(jiǎn)單的Windows應(yīng)用程序命名規(guī)則Windows謝謝閱讀應(yīng)用軟件的開發(fā)。【規(guī)則3-2-1】類名和函數(shù)名用大寫字母開頭的單詞組合而成。精品文檔放心下載例如:classNode;//類名classLeafNode;//類名voidDraw(void);//函數(shù)名voidSetValue(intvalue);//函數(shù)名感謝閱讀【規(guī)則3-2-2】變量和參數(shù)用小寫字母開頭的單詞組合而成。精品文檔放心下載例如:BOOLflag;intdrawMode;【規(guī)則3-2-3】常量全用大寫的字母,用下劃線分割單詞。感謝閱讀例如:constintMAX=100;constintMAX_LENGTH=100;【規(guī)則3-2-4】靜態(tài)變量加前綴s_(表示static感謝閱讀例如:voidInit(…){staticints_initValue;//靜態(tài)變量精品文檔放心下載…}【規(guī)則3-2-5】如果不得已需要全局變量,則使全局變量加前綴g_(表示global感謝閱讀例如:intg_howManyPeople;//全局變量intg_howMuchMoney;//全局變量【規(guī)則3-2-6m_(表示member謝謝閱讀的參數(shù)同名。例如:voidObject::SetValue(intwidth,intheight)精品文檔放心下載{m_width=width;m_height=height;}【規(guī)則3-2-7感謝閱讀識(shí)符加上能反映軟件性質(zhì)的前綴。例如三維圖形標(biāo)準(zhǔn)OpenGL的所有庫(kù)函數(shù)均以gl感謝閱讀有常量(或宏定義)均以GL開頭。3.3簡(jiǎn)單的Unix應(yīng)用程序命名規(guī)則第4章表達(dá)式和基本語句讀者可能懷疑:連if、for、while、goto、switch這樣簡(jiǎn)單的東西也要探討編程風(fēng)格,是感謝閱讀不是小題大做?我真的發(fā)覺很多程序員用隱含錯(cuò)誤的方式寫表達(dá)式和基本語句,我自己也犯過類似的錯(cuò)誤。感謝閱讀表達(dá)式和語句都屬于C++/C精品文檔放心下載納了正確使用表達(dá)式和語句的一些規(guī)則與建議。4.1運(yùn)算符的優(yōu)先級(jí)C++/C4-1+-*謝謝閱讀的優(yōu)先級(jí)高于對(duì)應(yīng)的二元運(yùn)算符。優(yōu)先級(jí)運(yùn)算符結(jié)合律從高到低排列()[]->.從左至右!~++--(類型)sizeof+-*&從右至左*/%從左至右+-從左至右<<>>從左至右<<=>>=從左至右==!=從左至右&從左至右^從左至右|從左至右&&從左至右||從右至左?:從右至左=+=-=*=/=%=&=^=|=<<=>>=從左至右表4-1運(yùn)算符的優(yōu)先級(jí)與結(jié)合律【規(guī)則4-1-1精品文檔放心下載認(rèn)的優(yōu)先級(jí)。由于將表4-1謝謝閱讀的操作順序。例如:word=(high<<8)|lowif((a|b)&&(a&c))4.2復(fù)合表達(dá)式如a=b=c=0這樣的表達(dá)式稱為復(fù)合表達(dá)式。允許復(fù)合表達(dá)式存在的理由是:(1精品文檔放心下載(2)可以提高編譯效率。但要防止濫用復(fù)合表達(dá)式?!疽?guī)則4-2-1】不要編寫太復(fù)雜的復(fù)合表達(dá)式。例如:i=a>=b&&c<d&&c+f<=g+h;//復(fù)合表達(dá)式過于復(fù)雜感謝閱讀【規(guī)則4-2-2】不要有多用途的復(fù)合表達(dá)式。例如:d=(a=b+c)+r;該表達(dá)式既求a值又求d值。應(yīng)該拆分為兩個(gè)獨(dú)立的語句:感謝閱讀a=b+c;d=a+r;【規(guī)則4-2-3】不要把程序中的復(fù)合表達(dá)式與“真正的數(shù)學(xué)表達(dá)式”混淆。感謝閱讀例如:if(a<b<c)//a<b<c是數(shù)學(xué)表達(dá)式而不是程序表達(dá)式精品文檔放心下載并不表示if((a<b)&&(b<c))而是成了令人費(fèi)解的if((a<b)<c)4.3if語句if語句是C++/C語言中最簡(jiǎn)單、最常用的語句,然而很多程序員用隱含錯(cuò)誤的方式寫if語精品文檔放心下載句。本節(jié)以“與零值比較”為例,展開討論。4.3.1布爾變量與零值比較【規(guī)則4-3-1】不可將布爾變量直接與TRUE、FALSE或者1、0進(jìn)行比較。感謝閱讀(記為FALSE(記為TRUETRUE感謝閱讀VisualC++將TRUE定義為1VisualBasic則將精品文檔放心下載TRUE定義為-1。假設(shè)布爾變量名字為flag,它與零值比較的標(biāo)準(zhǔn)if語句如下:精品文檔放心下載if(flag)//表示flag為真if(!flag)//表示flag為假其它的用法都屬于不良風(fēng)格,例如:if(flag==TRUE)if(flag==1)if(flag==FALSE)if(flag==0)4.3.2整型變量與零值比較【規(guī)則4-3-2】應(yīng)當(dāng)將整型變量用“==”或“!=”直接與0比較。感謝閱讀假設(shè)整型變量的名字為value,它與零值比較的標(biāo)準(zhǔn)if語句如下:感謝閱讀if(value==0)if(value!=0)不可模仿布爾變量的風(fēng)格而寫成if(value)//會(huì)讓人誤解value是布爾變量精品文檔放心下載if(!value)4.3.3浮點(diǎn)變量與零值比較【規(guī)則4-3-3】不可將浮點(diǎn)變量用“==”或“!=”與任何數(shù)字比較。精品文檔放心下載千萬要留意,無論是float還是double類型的變量,都有精度限制。所以一定要避免將浮感謝閱讀點(diǎn)變量用“==”或“!=”與數(shù)字比較,應(yīng)該設(shè)法轉(zhuǎn)化成“>=”或“<=”形式。謝謝閱讀假設(shè)浮點(diǎn)變量的名字為x,應(yīng)當(dāng)將if(x==0.0)//隱含錯(cuò)誤的比較轉(zhuǎn)化為if((x>=-EPSINON)&&(x<=EPSINON))謝謝閱讀其中EPSINON4.3.4指針變量與零值比較【規(guī)則4-3-4】應(yīng)當(dāng)將指針變量用“==”或“!=”與NULL比較。謝謝閱讀指針變量的零值是“空(記為NULLNULL的值與0相同,但是兩者意義不同。假設(shè)感謝閱讀指針變量的名字為p,它與零值比較的標(biāo)準(zhǔn)if語句如下:謝謝閱讀if(p==NULL)//p與NULL顯式比較,強(qiáng)調(diào)p是指針變量謝謝閱讀if(p!=NULL)不要寫成if(p==0)//容易讓人誤解p是整型變量if(p!=0)或者if(p)//容易讓人誤解p是布爾變量if(!p)4.3.5對(duì)if語句的補(bǔ)充說明有時(shí)候我們可能會(huì)看到if(NULL==p)這樣古怪的格式。不是程序?qū)戝e(cuò)了,是程序員為了防止精品文檔放心下載將if(p==NULL)誤寫成if(p=NULL),而有意把p和NULL顛倒。編譯器認(rèn)為if(p=NULL)是合感謝閱讀法的,但是會(huì)指出if(NULL=p)是錯(cuò)誤的,因?yàn)镹ULL不能被賦值。感謝閱讀程序中有時(shí)會(huì)遇到ifreturn的組合,應(yīng)該將如下不良風(fēng)格的程序精品文檔放心下載if(condition)returnx;returny;改寫為if(condition){returnx;}else{returny;}或者改寫成更加簡(jiǎn)練的return(condition?x:y);4.4循環(huán)語句的效率C++/C循環(huán)語句中,for語句使用頻率最高,while語句其次,do語句很少用。本節(jié)重點(diǎn)論謝謝閱讀述循環(huán)體的效率。提高循環(huán)體效率的基本辦法是降低循環(huán)體的復(fù)雜性。精品文檔放心下載【建議4-4-1謝謝閱讀在最外層,以減少CPU跨切循環(huán)層的次數(shù)。例如示例4-4(b)的效率比示例4-4(a)的高。感謝閱讀for(row=0;row<100;row++){for(col=0;col<5;col++){sum=sum+a[row][col];}}for(col=0;col<5;col++){for(row=0;row<100;row++){sum=sum+a[row][col];}}示例4-4(a)低效率:長(zhǎng)循環(huán)在最外層示例4-4(b)高效率:長(zhǎng)循環(huán)在最內(nèi)層精品文檔放心下載【建議4-4-2謝謝閱讀的外面。示例4-4(c)的程序比示例4-4(d)多執(zhí)行了N-1次邏輯判斷。并且由于前者老要進(jìn)感謝閱讀行邏輯判斷,打斷了循環(huán)“流水線作業(yè),使得編譯器不能對(duì)循環(huán)進(jìn)行優(yōu)化處理,降低了效謝謝閱讀N4-4(d)N謝謝閱讀差別并不明顯,采用示例4-4(c)的寫法比較好,因?yàn)槌绦蚋雍?jiǎn)潔。精品文檔放心下載for(i=0;i<N;i++){if(condition)DoSomething();elseDoOtherthing();}if(condition){for(i=0;i<N;i++)DoSomething();}else{for(i=0;i<N;i++)DoOtherthing();}表4-4(c)效率低但程序簡(jiǎn)潔表4-4(d)效率高但程序不簡(jiǎn)潔謝謝閱讀4.5for語句的循環(huán)控制變量【規(guī)則4-5-1】不可在for循環(huán)體內(nèi)修改循環(huán)變量,防止for循環(huán)失去控制。感謝閱讀【建議4-5-1】建議for語句的循環(huán)控制變量的取值采用“半開半閉區(qū)間”寫法。感謝閱讀示例4-5(a)中的x值屬于半開半閉區(qū)間“0=<x<N”,起點(diǎn)到終點(diǎn)的間隔為N,循環(huán)次數(shù)為N。謝謝閱讀示例4-5(b)中的x值屬于閉區(qū)間“0=<x<=N-1”,起點(diǎn)到終點(diǎn)的間隔為N-1,循環(huán)次數(shù)為N。感謝閱讀相比之下,示例4-5(a)的寫法更加直觀,盡管兩者的功能是相同的。感謝閱讀for(intx=0;x<N;x++){…}for(intx=0;x<=N-1;x++){…}示例4-5(a)循環(huán)變量屬于半開半閉區(qū)間示例4-5(b)循環(huán)變量屬于閉區(qū)間謝謝閱讀4.6switch語句有了if語句為什么還要switch語句?switchifif語句來謝謝閱讀實(shí)現(xiàn)多分支選擇,但那樣的程序冗長(zhǎng)難讀。這是switch語句存在的理由。謝謝閱讀switch語句的基本格式是:switch(variable){casevalue1:…break;casevalue2:…break;…default:…break;}【規(guī)則4-6-1】每個(gè)case語句的結(jié)尾不要忘了加break,否則將導(dǎo)致多個(gè)分支重疊(除非謝謝閱讀【規(guī)則4-6-2defaultdefault謝謝閱讀該保留語句default:break;default感謝閱讀處理。4.7goto語句gotogoto語句可以靈活跳轉(zhuǎn),謝謝閱讀goto謝謝閱讀能跳過了某些對(duì)象的構(gòu)造、變量的初始化、重要的計(jì)算等語句,例如:感謝閱讀gotostate;Strings1,s2;//被goto跳過intsum=0;//被goto跳過…state:…如果編譯器不能發(fā)覺此類錯(cuò)誤,每用一次goto語句都可能留下隱患。精品文檔放心下載很多人建議廢除C++/C的goto語句,以絕后患。但實(shí)事求是地說,錯(cuò)誤是程序員自己造成精品文檔放心下載的,不是goto的過錯(cuò)。goto語句至少有一處可顯神通,它能從多重循環(huán)體中咻地一下子跳精品文檔放心下載到外面,用不著寫很多次的break語句;例如{…{…{…gotoerror;}}}error:…就象樓房著火了,來不及從樓梯一級(jí)一級(jí)往下走,可從窗口跳出火坑。所以我們主張少用、感謝閱讀慎用goto語句,而不是禁用。第5章常量常量是一種標(biāo)識(shí)符,它的值在運(yùn)行期間恒定不變。C語言用#define來定義常量(稱為宏常精品文檔放心下載C++語言除了#define外還可以用const來定義常量(稱為const謝謝閱讀5.1為什么需要常量如果不使用常量,直接在程序中填寫數(shù)字或字符串,將會(huì)有什么麻煩?謝謝閱讀(1)程序的可讀性(可理解性)變差。程序員自己會(huì)忘記那些數(shù)字或字符串是什么意思,感謝閱讀用戶則更加不知它們從何處來、表示什么。(2)在程序的很多地方輸入同樣的數(shù)字或字符串,難保不發(fā)生書寫錯(cuò)誤。感謝閱讀(3)如果要修改數(shù)字或字符串,則會(huì)在很多地方改動(dòng),既麻煩又容易出錯(cuò)。精品文檔放心下載【規(guī)則5-1-1】盡量使用含義直觀的常量來表示那些將在程序中多次出現(xiàn)的數(shù)字或字符串。精品文檔放心下載例如:#defineMAX100/*C語言的宏常量*/constintMAX=100;//C++語言的const常量感謝閱讀constfloatPI=3.14159;//C++語言的const常量謝謝閱讀5.2const與#define的比較C++語言可以用const#define感謝閱讀優(yōu)點(diǎn):(1const謝謝閱讀謝謝閱讀(2)有些集成化的調(diào)試工具可以對(duì)const常量進(jìn)行調(diào)試,但是不能對(duì)宏常量進(jìn)行調(diào)試。精品文檔放心下載【規(guī)則5-2-1C++程序中只使用const常量而不使用宏常量,即const常量完全取代宏感謝閱讀常量。5.3常量定義規(guī)則【規(guī)則5-3-1精品文檔放心下載頭部。為便于管理,可以把不同模塊的常量集中存放在一個(gè)公共的頭文件中。感謝閱讀【規(guī)則5-3-2精品文檔放心下載一些孤立的值。例如:constfloatRADIUS=100;constfloatDIAMETER=RADIUS*2;感謝閱讀5.4類中的常量#define精品文檔放心下載于是想當(dāng)然地覺得應(yīng)該用const修飾數(shù)據(jù)成員來實(shí)現(xiàn)。const數(shù)據(jù)成員的確是存在的,但其謝謝閱讀含義卻不是我們所期望的。const數(shù)據(jù)成員只在某個(gè)對(duì)象生存期內(nèi)是常量,而對(duì)于整個(gè)類而謝謝閱讀言卻是可變的,因?yàn)轭惪梢詣?chuàng)建多個(gè)對(duì)象,不同的對(duì)象其const數(shù)據(jù)成員的值可以不同。感謝閱讀不能在類聲明中初始化const謝謝閱讀譯器不知道SIZE的值是什么。classA{…constintSIZE=100;//錯(cuò)誤,企圖在類聲明中初始化const數(shù)據(jù)成員謝謝閱讀intarray[SIZE];//錯(cuò)誤,未知的SIZE感謝閱讀};const數(shù)據(jù)成員的初始化只能在類構(gòu)造函數(shù)的初始化表中進(jìn)行,例如謝謝閱讀classA{…A(intsize);//構(gòu)造函數(shù)constintSIZE;};A::A(intsize):SIZE(size)//構(gòu)造函數(shù)的初始化表謝謝閱讀{…}Aa(100);//對(duì)象a的SIZE值為100精品文檔放心下載Ab(200);//對(duì)象b的SIZE值為200謝謝閱讀怎樣才能建立在整個(gè)類中都恒定的常量呢?別指望const謝謝閱讀量來實(shí)現(xiàn)。例如classA{…enum{SIZE1=100,SIZE2=200};//枚舉常量感謝閱讀intarray1[SIZE1];intarray2[SIZE2];};精品文檔放心下載含數(shù)據(jù)類型是整數(shù),其最大值有限,且不能表示浮點(diǎn)數(shù)(如PI=3.14159精品文檔放心下載第6章函數(shù)設(shè)計(jì)函數(shù)是C++/C謝謝閱讀感謝閱讀的一些規(guī)則。函數(shù)接口的兩個(gè)要素是參數(shù)和返回值。C語言中,函數(shù)的參數(shù)和返回值的傳遞方式有兩種:感謝閱讀值傳遞(passbyvalue)和指針傳遞(passbypointerC++語言中多了引用傳遞謝謝閱讀(passbyreference感謝閱讀常迷惑不解,容易引起混亂,請(qǐng)先閱讀6.6節(jié)“引用與指針的比較。謝謝閱讀6.1參數(shù)的規(guī)則【規(guī)則6-1-1謝謝閱讀數(shù)沒有參數(shù),則用void填充。例如:voidSetValue(intwidth,intheight);//良好的風(fēng)格精品文檔放心下載voidSetValue(int,int);//不良的風(fēng)格謝謝閱讀floatGetValue(void);//良好的風(fēng)格精品文檔放心下載floatGetValue();//不良的風(fēng)格【規(guī)則6-1-2】參數(shù)命名要恰當(dāng),順序要合理。例如編寫字符串拷貝函數(shù)StringCopy,它有兩個(gè)參數(shù)。如果把參數(shù)名字起為str1和str2,感謝閱讀例如voidStringCopy(char*str1,char*str2);謝謝閱讀那么我們很難搞清楚究竟是把str1拷貝到str2中,還是剛好倒過來。精品文檔放心下載strSource和strDestination精品文檔放心下載出應(yīng)該把strSource拷貝到strDestination。感謝閱讀還有一個(gè)問題,這兩個(gè)參數(shù)那一個(gè)該在前那一個(gè)該在后?參數(shù)的順序要遵循程序員的習(xí)慣。謝謝閱讀一般地,應(yīng)將目的參數(shù)放在前面,源參數(shù)放在后面。如果將函數(shù)聲明為:voidStringCopy(char*strSource,char*strDestination);感謝閱讀別人在使用時(shí)可能會(huì)不假思索地寫成如下形式:charstr[20];StringCopy(str,“HelloWorld”);//參數(shù)順序顛倒精品文檔放心下載【規(guī)則6-1-3const,以防止該指針在感謝閱讀函數(shù)體內(nèi)被意外修改。例如:voidStringCopy(char*strDestination,constchar*strSource);謝謝閱讀【規(guī)則6-1-4】如果輸入?yún)?shù)以值傳遞的方式傳遞對(duì)象,則宜改用“const&”方式來傳遞,精品文檔放心下載這樣可以省去臨時(shí)對(duì)象的構(gòu)造和析構(gòu)過程,從而提高效率。謝謝閱讀【建議6-1-15謝謝閱讀使用時(shí)容易將參數(shù)類型或順序搞錯(cuò)。【建議6-1-2】盡量不要使用類型和數(shù)目不確定的參數(shù)。感謝閱讀C標(biāo)準(zhǔn)庫(kù)函數(shù)printf是采用不確定參數(shù)的典型代表,其原型為:感謝閱讀intprintf(constchat*format[,argument]…);精品文檔放心下載這種風(fēng)格的函數(shù)在編譯時(shí)喪失了嚴(yán)格的類型安全檢查。6.2返回值的規(guī)則【規(guī)則6-2-1】不要省略返回值的類型。C語言中,凡不加類型說明的函數(shù),一律自動(dòng)按整型處理。這樣做不會(huì)有什么好處,卻容易精品文檔放心下載被誤解為void類型。C++C++程序可以調(diào)用C謝謝閱讀C++/Cvoid精品文檔放心下載類型?!疽?guī)則6-2-2】函數(shù)名字與返回值類型在語義上不可沖突。謝謝閱讀違反這條規(guī)則的典型代表是C標(biāo)準(zhǔn)庫(kù)函數(shù)getchar。精品文檔放心下載例如:charc;c=getchar();if(c==EOF)…按照getcharc聲明為chargetchar感謝閱讀的確不是char類型,而是int類型,其原型如下:感謝閱讀intgetchar(void);由于c是char類型,取值范圍是[-128,127],如果宏EOF的值在char的取值范圍之外,謝謝閱讀那么if語句將總是失敗,這種“危險(xiǎn)”人們一般哪里料得到!導(dǎo)致本例錯(cuò)誤的責(zé)任并不在感謝閱讀用戶,是函數(shù)getchar誤導(dǎo)了使用者。【規(guī)則6-2-3精品文檔放心下載志用return語句返回?;仡櫳侠?,C標(biāo)準(zhǔn)庫(kù)函數(shù)的設(shè)計(jì)者為什么要將getchar聲明為令人迷糊的int類型呢?他會(huì)謝謝閱讀那么傻嗎?在正常情況下,getchar的確返回單個(gè)字符。但如果getchar碰到文件結(jié)束標(biāo)志或發(fā)生讀錯(cuò)感謝閱讀誤,它必須返回一個(gè)標(biāo)志EOF。為了區(qū)別于正常的字符,只好將EOF定義為負(fù)數(shù)(通常為負(fù)感謝閱讀1getchar就成了int類型。謝謝閱讀精品文檔放心下載值和錯(cuò)誤標(biāo)志分開。即:正常值用輸出參數(shù)獲得,而錯(cuò)誤標(biāo)志用return語句返回。感謝閱讀函數(shù)getchar可以改寫成BOOLGetChar(char*c);謝謝閱讀雖然gechar比GetCharputchar(getchar());但是如果getchar謝謝閱讀活性又有什么用呢?【建議6-2-1感謝閱讀加返回值。例如字符串拷貝函數(shù)strcpy的原型:char*strcpy(char*strDest,constchar*strSrc);感謝閱讀strcpy函數(shù)將strSrc拷貝至輸出參數(shù)strDest中,同時(shí)函數(shù)的返回值又是strDest。這樣感謝閱讀做并非多此一舉,可以獲得如下靈活性:charstr[20];intlength=strlen(strcpy(str,“HelloWorld”));精品文檔放心下載【建議6-2-2替換“值傳遞可感謝閱讀以提高效率。而有些場(chǎng)合只能用“值傳遞”而不能用“引用傳遞,否則會(huì)出錯(cuò)。感謝閱讀例如:classString{…//賦值函數(shù)String&operate=(constString&other);精品文檔放心下載//相加函數(shù),如果沒有friend修飾則只許有一個(gè)右側(cè)參數(shù)感謝閱讀friendStringoperate+(constString&s1,constString&s2);感謝閱讀private:char*m_data;}String的賦值函數(shù)operate=的實(shí)現(xiàn)如下:感謝閱讀String&String::operate=(constString&other)精品文檔放心下載{if(this==&other)return*this;deletem_data;m_data=newchar[strlen()+1];感謝閱讀strcpy(m_data,);return*this;//返回的是*this的引用,無需拷貝過程感謝閱讀}對(duì)于賦值函數(shù),應(yīng)當(dāng)用“引用傳遞”的方式返回String對(duì)象。如果用“值傳遞”的方式,感謝閱讀雖然功能仍然正確,但由于return語句要把*this拷貝到保存返回值的外部存儲(chǔ)單元之中,謝謝閱讀增加了不必要的開銷,降低了賦值函數(shù)的效率。例如:Stringa,b,c;…a=b;//如果用“值傳遞,將產(chǎn)生一次*this拷貝謝謝閱讀a=b=c;//如果用“值傳遞,將產(chǎn)生兩次*this拷貝精品文檔放心下載String的相加函數(shù)operate+的實(shí)現(xiàn)如下:感謝閱讀Stringoperate+(constString&s1,constString&s2)感謝閱讀{Stringtemp;delete;//是僅含‘\0’的字符串=newchar[strlen(s1.data)+strlen(s2.data)+1];感謝閱讀strcpy(,s1.data);strcat(,s2.data);returntemp;}對(duì)于相加函數(shù),應(yīng)當(dāng)用“值傳遞的方式返回String對(duì)象。如果改用“引用傳遞,那么函精品文檔放心下載數(shù)返回值是一個(gè)指向局部對(duì)象temp的“引用。由于temp在函數(shù)結(jié)束時(shí)被自動(dòng)銷毀,將導(dǎo)感謝閱讀致返回的“引用”無效。例如:c=a+b;此時(shí)a+b并不返回期望值,c什么也得不到,流下了隱患。精品文檔放心下載6.3函數(shù)內(nèi)部實(shí)現(xiàn)的規(guī)則不同功能的函數(shù)其內(nèi)部實(shí)現(xiàn)各不相同,看起來似乎無法就“內(nèi)部實(shí)現(xiàn)達(dá)成一致的觀點(diǎn)。但感謝閱讀根據(jù)經(jīng)驗(yàn),我們可以在函數(shù)體的“入口處”和“出口處”從嚴(yán)把關(guān),從而提高函數(shù)的質(zhì)量。感謝閱讀【規(guī)則6-3-1】在函數(shù)體的“入口處,對(duì)參數(shù)的有效性進(jìn)行檢查。精品文檔放心下載很多程序錯(cuò)誤是由非法參數(shù)引起的,我們應(yīng)該充分理解并正確使用“斷言(assert)來防精品文檔放心下載止此類錯(cuò)誤。詳見6.5節(jié)“使用斷言?!疽?guī)則6-3-2】在函數(shù)體的“出口處,對(duì)return語句的正確性和效率進(jìn)行檢查。謝謝閱讀如果函數(shù)有返回值,那么函數(shù)的“出口處是return語句。我們不要輕視r(shí)eturn語句。如感謝閱讀果return語句寫得不好,函數(shù)要么出錯(cuò),要么效率低下。精品文檔放心下載注意事項(xiàng)如下:(1return語句不可返回指向“棧內(nèi)存的“指針或者“引用,因?yàn)樵搩?nèi)存在函數(shù)體結(jié)精品文檔放心下載束時(shí)被自動(dòng)銷毀。例如char*Func(void){charstr[]=“helloworld”;//str的內(nèi)存位于棧上謝謝閱讀…returnstr;//將導(dǎo)致錯(cuò)誤}(2)要搞清楚返回的究竟是“值。謝謝閱讀(3)如果函數(shù)返回值是一個(gè)對(duì)象,要考慮return語句的效率。例如感謝閱讀returnString(s1+s2);這是臨時(shí)對(duì)象的語法,表示“創(chuàng)建一個(gè)臨時(shí)對(duì)象并返回它。不要以為它與“先創(chuàng)建一個(gè)局感謝閱讀部對(duì)象temp并返回它的結(jié)果”是等價(jià)的,如Stringtemp(s1+s2);returntemp;實(shí)質(zhì)不然,上述代碼將發(fā)生三件事。首先,temp感謝閱讀造函數(shù)把temp拷貝到保存返回值的外部存儲(chǔ)單元中;最后,temp在函數(shù)結(jié)束時(shí)被銷毀(調(diào)謝謝閱讀“創(chuàng)建一個(gè)臨時(shí)對(duì)象并返回它”的過程是不同的,編譯器直接把臨時(shí)對(duì)精品文檔放心下載象創(chuàng)建并初始化在外部存儲(chǔ)單元中,省去了拷貝和析構(gòu)的化費(fèi),提高了效率。感謝閱讀類似地,我們不要將returnint(x+y);//創(chuàng)建一個(gè)臨時(shí)變量并返回它精品文檔放心下載寫成inttemp=x+y;returntemp;由于內(nèi)部數(shù)據(jù)類型如int,float,double的變量不存在構(gòu)造函數(shù)與析構(gòu)函數(shù),雖然該“臨時(shí)感謝閱讀變量的語法”不會(huì)提高多少效率,但是程序更加簡(jiǎn)潔易讀。感謝閱讀6.4其它建議【建議6-4-1】函數(shù)的功能要單一,不要設(shè)計(jì)多用途的函數(shù)。謝謝閱讀【建議6-4-2】函數(shù)體的規(guī)模要小,盡量控制在50行代碼之內(nèi)。精品文檔放心下載【建議6-4-3】盡量避免函數(shù)帶有“記憶”功能。相同的輸入應(yīng)當(dāng)產(chǎn)生相同的輸出。謝謝閱讀帶有“記憶功能的函數(shù),其行為可能是不可預(yù)測(cè)的,因?yàn)樗男袨榭赡苋Q于某種“記憶精品文檔放心下載狀態(tài)。這樣的函數(shù)既不易理解又不利于測(cè)試和維護(hù)。在C/C++語言中,函數(shù)的static局部精品文檔放心下載變量是函數(shù)的“記憶”存儲(chǔ)器。建議盡量少用static局部變量,除非必需。謝謝閱讀【建議6-4-4謝謝閱讀的有效性,例如全局變量、文件句柄等。【建議6-4-5】用于出錯(cuò)處理的返回值一定要清楚,讓使用者不容易忽視或誤解錯(cuò)誤情況。精品文檔放心下載6.5使用斷言程序一般分為Debug版本和Release版本,Debug版本用于內(nèi)部調(diào)試,Release版本發(fā)行給謝謝閱讀用戶使用。斷言assert是僅在Debug版本起作用的宏,它用于檢查“不應(yīng)該”發(fā)生的情況。示例6-5謝謝閱讀是一個(gè)內(nèi)存復(fù)制函數(shù)。在運(yùn)行過程中,如果assert的參數(shù)為假,那么程序就會(huì)中止(一般謝謝閱讀地還會(huì)出現(xiàn)提示對(duì)話,說明在什么地方引發(fā)了assert精品文檔放心下載void*memcpy(void*pvTo,constvoid*pvFrom,size_tsize)精品文檔放心下載{assert((pvTo!=NULL)&&(pvFrom!=NULL));//使用斷言感謝閱讀byte*pbTo=(byte*)pvTo;//防止改變pvTo的地址謝謝閱讀byte*pbFrom=(byte*)pvFrom;//防止改變pvFrom的地址感謝閱讀while(size-->0)*pbTo++=*pbFrom++;returnpvTo;}示例6-5復(fù)制不重疊的內(nèi)存塊assert不是一個(gè)倉(cāng)促拼湊起來的宏。為了不在程序的Debug版本和Release版本引起差別,精品文檔放心下載assertassertassert看成精品文檔放心下載一個(gè)在任何系統(tǒng)狀態(tài)下都可以安全使用的無害測(cè)試手段。如果程序在assert處終止了,并感謝閱讀不是說含有該assert的函數(shù)有錯(cuò)誤,而是調(diào)用者出了差錯(cuò),assert可以幫助我們找到發(fā)生感謝閱讀錯(cuò)誤的原因。很少有比跟蹤到程序的斷言,卻不知道該斷言的作用更讓人沮喪的事了。你化了很多時(shí)間,謝謝閱讀感謝閱讀精品文檔放心下載感謝閱讀見的事情,可是很少有程序員這樣做。這好比一個(gè)人在森林里,看到樹上釘著一塊“危險(xiǎn)”謝謝閱讀的大牌子。但危險(xiǎn)到底是什么?樹要倒?有廢井?有野獸?除非告訴人們“危險(xiǎn)”是什么,感謝閱讀精品文檔放心下載[Maguire,p8-p30]【規(guī)則6-5-1謝謝閱讀區(qū)別,后者是必然存在的并且是一定要作出處理的。【規(guī)則6-5-2精品文檔放心下載【建議6-5-1一謝謝閱讀旦確定了的假定,就要使用斷言對(duì)假定進(jìn)行檢查?!窘ㄗh6-5-2感謝閱讀瞞錯(cuò)誤。當(dāng)進(jìn)行防錯(cuò)設(shè)計(jì)時(shí),如果“不可能發(fā)生的事情的確發(fā)生了,則要使用斷言進(jìn)行報(bào)謝謝閱讀警。6.6引用與指針的比較引用是C++中的概念,初學(xué)者容易把引用和指針混淆一起。一下程序中,n是m的一個(gè)引用感謝閱讀(referencem是被引用物(referent謝謝閱讀intm;int&n=m;n相當(dāng)于mn的任何操作就是對(duì)m謝謝閱讀號(hào)是“三毛。說“三毛”怎么怎么的,其實(shí)就是對(duì)王小毛說三道四。所以n既不是m的拷感謝閱讀貝,也不是指向m的指針,其實(shí)n就是m它自己。謝謝閱讀引用的一些規(guī)則如下:(1精品文檔放心下載(2)不能有NULL引用,引用必須與合法的存儲(chǔ)單元關(guān)聯(lián)(指針則可以是NULL謝謝閱讀(3感謝閱讀以下示例程序中,k被初始化為ik=j并不能將k修改成為jk感謝閱讀的值改變成為6。由于k是i的引用,所以i的值也變成了6。精品文檔放心下載inti=5;intj=6;int&k=i;k=j;//k和i的值都變成了6;謝謝閱讀參數(shù)和返回值。C++語言中,函數(shù)的參數(shù)和返回值的傳遞方式有三種:值傳遞、指針傳遞和精品文檔放心下載引用傳遞。以下是“值傳遞的示例程序。由于Func1函數(shù)體內(nèi)的x是外部變量n的一份拷貝,改變x感謝閱讀的值不會(huì)影響n,所以n的值仍然是0。voidFunc1(intx){x=x+10;}…intn=0;Func1(n);cout<<“n=”<<n<<endl;//n=0以下是“指針傳遞的示例程序。由于Func2函數(shù)體內(nèi)的x是指向外部變量n的指針,改變精品文檔放心下載該指針的內(nèi)容將導(dǎo)致n的值改變,所以n的值成為10。謝謝閱讀voidFunc2(int*x){(*x)=(*x)+10;}…intn=0;Func2(&n);cout<<“n=”<<n<<endl;//n=10謝謝閱讀以下是“引用傳遞”的示例程序。由于Func3函數(shù)體內(nèi)的x是外部變量n的引用,x和n是精品文檔放心下載同一個(gè)東西,改變x等于改變n,所以n的值成為10。謝謝閱讀voidFunc3(int&x){x=x+10;}…intn=0;Func3(n);cout<<“n=”<<n<<endl;//n=10感謝閱讀對(duì)比上述三個(gè)示例程序,會(huì)發(fā)現(xiàn)“引用傳遞”的性質(zhì)象“指針傳遞,而書寫方式象“值傳精品文檔放心下載遞。實(shí)際上“引用可以做的任何事情“指針也都能夠做,為什么還要“引用這東西?感謝閱讀答案是“用適當(dāng)?shù)墓ぞ咦銮∪缙浞值墓ぷ鳌8兄x閱讀刀,它可以用來砍樹、裁紙、修指甲、理發(fā)等等,誰敢這樣用?精品文檔放心下載如果的確只需要借用一下某個(gè)對(duì)象的“別名,那么就用“引用,而不要用“指針,以免感謝閱讀精品文檔放心下載章的鑰匙交給他,那么他就獲得了不該有的權(quán)利。第7章內(nèi)存管理歡迎進(jìn)入內(nèi)存這片雷區(qū)。偉大的BillGates曾經(jīng)失言:謝謝閱讀640Koughttobeenoughforeverybody精品文檔放心下載—BillGates1981精品文檔放心下載謝謝閱讀者需細(xì)心閱讀,做到真正地通曉內(nèi)存管理。7.1內(nèi)存分配方式內(nèi)存分配方式有三種:(1)從靜態(tài)存儲(chǔ)區(qū)域分配。內(nèi)存在程序編譯的時(shí)候就已經(jīng)分配好,這塊內(nèi)存在程序的整個(gè)謝謝閱讀運(yùn)行期間都存在。例如全局變量,static變量。(2)在棧上創(chuàng)建。在執(zhí)行函數(shù)時(shí),函數(shù)內(nèi)局部變量的存儲(chǔ)單元都可以在棧上創(chuàng)建,函數(shù)執(zhí)謝謝閱讀行結(jié)束時(shí)這些存儲(chǔ)單元自動(dòng)被釋放。棧內(nèi)存分配運(yùn)算內(nèi)置于處理器的指令集中,效率很高,謝謝閱讀但是分配的內(nèi)存容量有限。(3malloc或new申請(qǐng)任意多少的精品文檔放心下載內(nèi)存,程序員自己負(fù)責(zé)在何時(shí)用free或delete釋放內(nèi)存。動(dòng)態(tài)內(nèi)存的生存期由我們決定,感謝閱讀使用非常靈活,但問題也最多。7.2常見的內(nèi)存錯(cuò)誤及其對(duì)策精品文檔放心下載謝謝閱讀沖沖地把你找來,程序卻沒有發(fā)生任何問題,你一走,錯(cuò)誤又發(fā)作了。感謝閱讀常見的內(nèi)存錯(cuò)誤及其對(duì)策如下:內(nèi)存分配未成功,卻使用了它。精品文檔放心下載內(nèi)存之前檢查指針是否為NULL。如果指針p是函數(shù)的參數(shù),那么在函數(shù)的入口處用感謝閱讀assert(p!=NULL)進(jìn)行檢查。如果是用malloc或new來申請(qǐng)內(nèi)存,應(yīng)該用if(p==NULL)或精品文檔放心下載if(p!=NULL)進(jìn)行防錯(cuò)處理。內(nèi)存分配雖然成功,但是尚未初始化就引用它。犯這種錯(cuò)誤主要有兩個(gè)起因:一是沒有初始化的觀念;二是誤以為內(nèi)存的缺省初值全為零,感謝閱讀精品文檔放心下載感謝閱讀嫌麻煩。內(nèi)存分配成功并且已經(jīng)初始化,但操作越過了內(nèi)存的邊界。謝謝閱讀例如在使用數(shù)組時(shí)經(jīng)常發(fā)生下標(biāo)“多1”或者“少1”的操作。特別是在for循環(huán)語句中,精品文檔放心下載循環(huán)次數(shù)很容易搞錯(cuò),導(dǎo)致數(shù)組操作越界。忘記了釋放內(nèi)存,造成內(nèi)存泄露。謝謝閱讀誤。終有一次程序突然死掉,系統(tǒng)出現(xiàn)提示:內(nèi)存耗盡。malloc與free感謝閱讀有錯(cuò)誤(new/delete釋放了內(nèi)存卻繼續(xù)使用它。有三種情況:(1謝謝閱讀此時(shí)應(yīng)該重新設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu),從根本上解決對(duì)象管理的混亂局面。感謝閱讀(2)函數(shù)的return語句寫錯(cuò)了,注意不要返回指向“棧內(nèi)存”的“指針”或者“引用,精品文檔放心下載因?yàn)樵搩?nèi)存在函數(shù)體結(jié)束時(shí)被自動(dòng)銷毀。(3)使用free或delete釋放了內(nèi)存后,沒有將指針設(shè)置為NULL。導(dǎo)致產(chǎn)生“野指針。謝謝閱讀【規(guī)則7-2-1malloc或new申請(qǐng)內(nèi)存之后,應(yīng)該立即檢查指針值是否為NULL。防止使精品文檔放心下載用指針值為NULL的內(nèi)存?!疽?guī)則7-2-2精品文檔放心下載【規(guī)則7-2-3】避免數(shù)組或指針的下標(biāo)越界,特別要當(dāng)心發(fā)生“多1”或者“少1”操作。謝謝閱讀【規(guī)則7-2-4】動(dòng)態(tài)內(nèi)存的申請(qǐng)與釋放必須配對(duì),防止內(nèi)存泄漏。感謝閱讀【規(guī)則7-2-5free或deleteNULL謝謝閱讀指針。7.3指針與數(shù)組的對(duì)比C++/C程序中,指針和數(shù)組在不少地方可以相互替換著用,讓人產(chǎn)生一種錯(cuò)覺,以為兩者是謝謝閱讀等價(jià)的。精品文檔放心下載指向)一塊內(nèi)存,其地址與容量在生命期內(nèi)保持不變,只有數(shù)組的內(nèi)容可以改變。感謝閱讀指針可以隨時(shí)指向任意類型的內(nèi)存塊,它的特征是“可變,所以我們常用指針來操作動(dòng)態(tài)謝謝閱讀內(nèi)存。指針遠(yuǎn)比數(shù)組靈活,但也更危險(xiǎn)。下面以字符串為例比較指針與數(shù)組的特性。7.3.1修改內(nèi)容示例7-3-1中,字符數(shù)組a的容量是6個(gè)字符,其內(nèi)容為hello\0。a的內(nèi)容可以改變,如謝謝閱讀a[0]=‘X’。指針p指向常量字符串“world”(位于靜態(tài)存儲(chǔ)區(qū),內(nèi)容為world\0感謝閱讀符串的內(nèi)容是不可以被修改的。從語法上看,編譯器并不覺得語句p[0]=‘X’有什么不妥,謝謝閱讀但是該語句企圖修改常量字符串的內(nèi)容而導(dǎo)致運(yùn)行錯(cuò)誤。chara[]=“hello”;a[0]=‘X’;cout<<a<<endl;char*p=“world”;//注意p指向常量字符串精品文檔放心下載p[0]=‘X’;//編譯器不能發(fā)現(xiàn)該錯(cuò)誤cout<<p<<endl;示例7-3-1修改數(shù)組和指針的內(nèi)容7.3.2內(nèi)容復(fù)制與比較不能對(duì)數(shù)組名進(jìn)行直接復(fù)制與比較。示例7-3-2中,若想把數(shù)組a的內(nèi)容復(fù)制給數(shù)組b,不感謝閱讀能用語句b=a,否則將產(chǎn)生編譯錯(cuò)誤。應(yīng)該用標(biāo)準(zhǔn)庫(kù)函數(shù)strcpy進(jìn)行復(fù)制。同理,比較b感謝閱讀和a的內(nèi)容是否相同,不能用if(b==a)來判斷,應(yīng)該用標(biāo)準(zhǔn)庫(kù)函數(shù)strcmp進(jìn)行比較。感謝閱讀語句p=a并不能把a(bǔ)的內(nèi)容復(fù)制指針p,而是把a(bǔ)的地址賦給了p。要想復(fù)制a的內(nèi)容,可感謝閱讀以先用庫(kù)函數(shù)malloc為p申請(qǐng)一塊容量為strlen(a)+1strcpy進(jìn)行字謝謝閱讀符串復(fù)制。同理,語句if(p==a)比較的不是內(nèi)容而是地址,應(yīng)該用庫(kù)函數(shù)strcmp來比較。精品文檔放心下載//數(shù)組…chara[]="hello";charb[10];strcpy(b,a);//不能用b=a;if(strcmp(b,a)==0)//不能用if(b==a)謝謝閱讀…//指針…intlen=strlen(a);char*p=(char*)malloc(sizeof(char)*(len+1));精品文檔放心下載strcpy(p,a);//不要用p=a;if(strcmp(p,a)==0)//不要用if(p==a)謝謝閱讀…示例7-3-2數(shù)組和指針的內(nèi)容復(fù)制與比較7.3.3計(jì)算內(nèi)存容量用運(yùn)算符sizeof7-3-3(a,sizeof(a)的值是12謝謝閱讀(注意別忘了p指向a,但是sizeof(p)的值卻是4。這是因?yàn)閟izeof(p)得到謝謝閱讀的是一個(gè)指針變量的字節(jié)數(shù),相當(dāng)于sizeof(char*),而不是p所指的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年文具企業(yè)市場(chǎng)營(yíng)銷策略實(shí)施考核試卷及答案
- 發(fā)動(dòng)機(jī)廠裝卸作業(yè)安全規(guī)范
- 模具廠設(shè)備報(bào)廢處理辦法
- 音效設(shè)計(jì)工作室音效版權(quán)保護(hù)辦法
- 化工設(shè)備使用培訓(xùn)
- 化工物料使用培訓(xùn)
- 2026年物聯(lián)網(wǎng)在智能家居領(lǐng)域的創(chuàng)新應(yīng)用報(bào)告
- 城市公共交通一卡通系統(tǒng)與智能交通設(shè)施的融合創(chuàng)新可行性分析
- 中醫(yī)執(zhí)業(yè)醫(yī)師試題庫(kù)附答案
- 2025年水利安全員考試試題(含參考答案)
- 新疆環(huán)保行業(yè)前景分析報(bào)告
- 2025~2026學(xué)年福建省泉州五中七年級(jí)上學(xué)期期中測(cè)試英語試卷
- 聯(lián)合辦公合同范本
- 2025年生物多樣性保護(hù)與生態(tài)修復(fù)項(xiàng)目可行性研究報(bào)告
- 2025年黑龍江省檢察院公益訴訟業(yè)務(wù)競(jìng)賽測(cè)試題及答案解析
- 一氧化碳中毒救治課件
- 廣東事業(yè)單位歷年考試真題及答案
- 《會(huì)計(jì)信息化工作規(guī)范》解讀(楊楊)
- 工程機(jī)械設(shè)備租賃服務(wù)方案投標(biāo)文件(技術(shù)方案)
- 高海拔地區(qū)GNSS大壩監(jiān)測(cè)技術(shù)研究
- 實(shí)施指南(2025)《DL-T 1630-2016氣體絕緣金屬封閉開關(guān)設(shè)備局部放電特高頻檢測(cè)技術(shù)規(guī)范》
評(píng)論
0/150
提交評(píng)論