• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆 - 30, 文章 - 0, 評論 - 64, 引用 - 0
            數(shù)據(jù)加載中……

            在堆上分配內(nèi)存

            unsigned long *pA = new unsigned long; *pA = 10;
            unsigned long *pB = new unsigned long[ *pA ];

            上面就申請了兩塊內(nèi)存,pA所指的內(nèi)存(即pA的值所對應(yīng)的內(nèi)存)是4字節(jié)大小,而pB所指的內(nèi)存是4*10=40字節(jié)大小。應(yīng)該注意,由于new是一個操作符,其結(jié)構(gòu)為new <類型名>[<整型數(shù)字>]。它返回指針類型的數(shù)字,其中的<類型名>指明了什么樣的指針類型,而后面方括號的作用和定義數(shù)組時一樣,用于指明元素的個數(shù),但其返回的并不是數(shù)組類型,而是指針類型。



            delete pA; delete[] pB;

                注意delete操作符并不返回任何數(shù)字,但是其仍被稱作操作符,看起來它應(yīng)該被叫做語句更加合適,但為了滿足其依舊是操作符的特性,C++提供了一種很特殊的數(shù)字類型——void。其表示無,即什么都不是,這在《C++從零開始(七)》中將詳細說明。因此delete其實是要返回數(shù)字的,只不過返回的數(shù)字類型為void罷了。

                注意上面對pA和pB的釋放不同,因為pA按照最開始的書寫,是new unsigned long返回的,而pB是new unsigned long[ *pA ]返回的。所以需要在釋放pB時在delete的后面加上“[]”以表示釋放的是數(shù)組,不過在VC中,不管前者還是后者,都能正確釋放內(nèi)存,無需“[]”的介入以幫助編譯器來正確釋放內(nèi)存,因為以Windows為平臺而開發(fā)程序的VC是按照Windows操作系統(tǒng)的方式來進行內(nèi)存分配的,而Windows操作系統(tǒng)在釋放內(nèi)存時,無需知道欲釋放的內(nèi)存塊的長度,因為其已經(jīng)在內(nèi)部記錄下來(這種說法并不準(zhǔn)確,實際應(yīng)是C運行時期庫干了這些事,但其又是依賴于操作系統(tǒng)來干的,即其實是有兩層對內(nèi)存管理的包裝,在此不表)。

            posted @ 2008-11-26 15:40 henry08 閱讀(355) | 評論 (0)編輯 收藏

            指針

            再來看取內(nèi)容操作符“*”,其右接的數(shù)字類型是指針類型或數(shù)組類型,它的計算就是將此指針類型的數(shù)字直接轉(zhuǎn)換成地址類型的數(shù)字
            因為指針類型的數(shù)字和地址類型的數(shù)字在數(shù)值上是相同的,僅僅計算規(guī)則不同


            地址類型的數(shù)字是在編譯時期給編譯器用的
            指針類型的數(shù)字是在運行時期給代碼用的

            posted @ 2008-11-26 15:39 henry08 閱讀(173) | 評論 (0)編輯 收藏

            申請內(nèi)存 靜態(tài)分配動態(tài)分配

            在申請內(nèi)存時總是申請固定大小的內(nèi)存,則稱此內(nèi)存是靜態(tài)分配的。前面提出的定義變量時,編譯器幫我們從棧上分配的內(nèi)存就屬于靜態(tài)分配


            根據(jù)用戶輸入的不同而可能申請不同大小的內(nèi)存時,則稱此內(nèi)存是動態(tài)分配的,后面說的從堆上分配就屬于動態(tài)分配。


            同樣,靜態(tài)分配的內(nèi)存利用率不高或運用不夠靈活,但代碼容易編寫且運行速度較快;動態(tài)分配的內(nèi)存利用率高,不過編寫代碼時要復(fù)雜些,需自己處理內(nèi)存的管理(分配和釋放)且由于這種管理的介入而運行速度較慢并代碼長度增加。
            靜態(tài)和動態(tài)的意義不僅僅如此,其有很多的深化,如硬編碼和軟編碼、緊耦合和松耦合,都是靜態(tài)和動態(tài)的深化。

            posted @ 2008-11-26 15:38 henry08 閱讀(833) | 評論 (0)編輯 收藏

            字符串

             char類型進行表示的字符串稱為單字節(jié)字符串(SingleByte),用這種表示方式記錄的文本文件稱為是ANSI格式的

              多字節(jié)字符串(MultiByte),用這種表示方式記錄的文本文件稱為是MBCS格式的

             寬字節(jié)字符串(WideChar),用這種表示方式記錄的文本文件稱為是Unicode格式的
                     (一個short類型的數(shù)字來表示,即每個字符的長度固定為2字節(jié))

            posted @ 2008-11-26 15:37 henry08 閱讀(191) | 評論 (0)編輯 收藏

            在線C++編譯器介紹

            下面的網(wǎng)址是最有名的兩個在線C++編譯網(wǎng)站:

            http://www.dinkumware.com/exam/default.aspx
            http://www.comeaucomputing.com/tryitout/
            許多在線判題系統(tǒng)也可以用來進行在線編譯:

            http://acm.zju.edu.cn/
            http://acm.pku.edu.cn/JudgeOnline/
            http://acm.uva.es/
            你可能會好奇這些網(wǎng)站使用的編譯器的版本和編譯參數(shù)到底是什么。有些網(wǎng)站會提供這些信息,而有些則不會。那么你就只能靠自己去發(fā)現(xiàn)這些“秘密”了。

            工欲善其事,必先利其器。讓我們先看看一些從編譯器獲取信息的小技巧。

            1. 輸出宏
            在C++中, 字符串常數(shù)不能作為模板參數(shù)。大多數(shù)編譯器會在錯誤信息中同時輸出字符串的內(nèi)容。下面的代碼展示了這一技巧。

            template<const char *> class A {};
            #define F0(x) #x
            #define F1(x) F0(x)
            #define V1 F1(__GNUC__)
            int main()
            {
                A<V1> a1;
            }


            這里,宏F0和F1用于將整型轉(zhuǎn)換成字符串。編譯器會輸出類似于"literal "3" is not a valid template argument because it is the address of an object with static linkage"的出錯信息。里面的"3"就是你想知道的宏的內(nèi)容。

            2. 輸出常數(shù)
            同樣,浮點數(shù)是不能作為模板參數(shù)的。編譯器通常會在錯誤信息中包含浮點數(shù)的值。利用這一點,我們可以輸出浮點常數(shù)。不過很不幸的是,VC會隱式的將浮點類型的模板參數(shù)轉(zhuǎn)換成int(參見https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=296008
            下面是一種輸出整型常量的方法:

            template<int N>
            class A
            {
            private:
                A();
            };
            int main()
            {
                A<sizeof(char)> a;
            }


            3. 輸出變量類型
            有時候,你可能需要知道某些變量的實際類型,這時候你可以使用下面的代碼:

            struct Dummy {};
            void Fun(const Dummy &);
            int main()
            {
                Fun(1+1U);
            }


            PS:如果你使用的是gcc,那么它會輸出"not convert `2' to `const Dummy&'",所以你需要將Fun的聲明改成"template<typename T> void Fun(T);"(換句話說,在gcc中上面的代碼也可以用于輸出常數(shù)的值)

            4. 輸出包含路徑
            如果要獲取STL頭文件的路徑,你可以使用:

            #include <ext/hash_set>
            using __gnu_cxx::hash_set;

            int main()
            {
                hash_set<> m;
            }

             

            PS:這里也可以使用vector。

            好,現(xiàn)在是時候牛刀小試了。關(guān)于如何獲取編譯器的版本信息,可以參考這篇文章:Pre-defined Compiler Macros

            下面是利用上面介紹的技巧獲得的dinkumware網(wǎng)站的一些資料:

            1. VC
            版本 (_MSC_FULL_VER):
                     VC8 140050727
                     VC7.1 13103077
                     VC7 13009466
                     VC6 12008804
            包含路徑:
                     D:\cplt501_vc_source\include (with _CPPLIB_VER=501)

            2. EDG
            版本(__EDG_VERSION__):
                     3.05 
            編譯參數(shù):
                     edgcc --alt -D_WIN32 -D_M_IX86 --no_inlining --diag_suppress=1290 --long_long --wchar_t_keyword -D_C99 -ID:\cplt501_gen_source/include/c -ID:\cplt501_gen_source/include -IC:\PROGRA~1\MICROS~2.NET\VC7/include --exceptions --microsoft -c sourceFile.cpp
            因為使用了VC兼容模式進行編譯,所以編譯器可能會模擬VC的部分bug

            3. GCC
            版本:
                     3.2.0
            包含路徑:
                     D:/cplt501_gen_source/include and D:/Mingw/include/c++/3.2/
            可以看到這里使用的GCC的版本已經(jīng)相當(dāng)陳舊了

             

             

             

             

             

             

             


            文章出處:http://www.diybl.com/course/3_program/c++/cppsl/2008108/149011.html

            posted @ 2008-11-26 12:35 henry08 閱讀(3533) | 評論 (2)編輯 收藏

            賦值語句

            賦值語句
            因此應(yīng)在變量定義的時候就進行賦值(但是會有性能上的影響,不過很小),以初始化變量而防止出現(xiàn)莫名其妙的值,在表達式中運用賦值運算符是不好的,即使它可能讓你寫出看起來簡練的語句,但它也使代碼的可維護性降低。


            true 0
            false 非0

            posted @ 2008-11-26 00:18 henry08 閱讀(938) | 評論 (0)編輯 收藏

            棧(Stack) 堆(Heap)


            C++即允許程序員有兩種向操作系統(tǒng)申請內(nèi)存的方式。
                前一種就是在棧上分配,申請的內(nèi)存大小固定不變
                后一種是在堆上分配,申請的內(nèi)存大小可以在運行的時候變化,不是固定不變的
            _______+++++++++++++++++++++++++++++++++++_____________________________




            棧(Stack)
                               
                              : 任何程序執(zhí)行前,預(yù)先分配一固定長度的內(nèi)存空間,
                                這塊內(nèi)存空間被稱作棧,也被叫做堆棧
                                即程序員自己判斷可以使用哪些內(nèi)存,
                                而不是操作系統(tǒng),很明顯,
                               上面的工作是由編譯器來做的,   
                               工作只是從操作系統(tǒng)變到程序自己而已,
                               好處就是由于程序一開始執(zhí)行時就已經(jīng)分配了一大塊連續(xù)內(nèi)存,
                               壞處也就是只能在編譯時期分配內(nèi)存


            上面的工作是編譯器做的,即程序員并不參與堆棧的維護。但上面已經(jīng)說了,堆棧相當(dāng)于在編譯時期分配內(nèi)存,因此一旦計算好某塊內(nèi)存的偏移,則這塊內(nèi)存就只能那么大,不能變化了


            __________________________________________________________________________________________________

            堆(Heap)

                            
            在Windows操作系統(tǒng)下,由操作系統(tǒng)分配的內(nèi)存就叫做堆
                             而棧可以認(rèn)為是在程序開始時就分配的堆
                             因此在堆上就可以分配大小變化的內(nèi)存塊,
                             因為是運行時期即時分配的內(nèi)存,
                            而不是編譯時期已計算好大小的內(nèi)存塊。

            posted @ 2008-11-24 18:45 henry08 閱讀(1034) | 評論 (1)編輯 收藏

            挑戰(zhàn)30天C/C++ 入門極限系列教程

            挑戰(zhàn)30天C/C++ 入門極限系列教程

            C++從零開始系列教程目錄
            http://www.bianceng.cn/Programming/cplus/jc/200705/659.htm

            posted @ 2008-11-23 21:56 henry08 閱讀(490) | 評論 (0)編輯 收藏

            Visual C++ 2005 系列課程學(xué)習(xí)筆記

             

            http://www.cnblogs.com/kai_xin/category/153770.html

            posted @ 2008-11-23 21:38 henry08 閱讀(227) | 評論 (0)編輯 收藏

            c++ 開blogs

            c++  開blogs

            posted @ 2008-11-11 15:35 henry08 閱讀(162) | 評論 (0)編輯 收藏

            僅列出標(biāo)題
            共3頁: 1 2 3 
            久久久噜噜噜久久熟女AA片| 岛国搬运www久久| 久久久国产打桩机| 久久精品午夜一区二区福利| 国产一区二区三区久久| 久久精品国产99久久久香蕉| 狠狠色丁香久久婷婷综合图片| 久久精品国产免费观看三人同眠| 97久久香蕉国产线看观看| 国产亚洲色婷婷久久99精品91| 国产69精品久久久久9999APGF| 国产精品久久久久久| 国产精品久久久久a影院| 麻豆精品久久精品色综合| 国内精品久久久久久久久电影网| 狠狠久久亚洲欧美专区| 一本色道久久99一综合| 久久久久亚洲?V成人无码| 2021久久精品国产99国产精品| 亚洲美日韩Av中文字幕无码久久久妻妇| 性色欲网站人妻丰满中文久久不卡| 国产精品成人久久久久三级午夜电影 | 久久青青草原综合伊人| 精品久久久久久中文字幕大豆网 | 久久亚洲电影| 久久精品国产99国产电影网| 青草国产精品久久久久久| 香蕉久久夜色精品国产2020| 日本三级久久网| 久久久久免费精品国产| 久久精品亚洲精品国产色婷| 日韩人妻无码精品久久久不卡| 精产国品久久一二三产区区别 | 曰曰摸天天摸人人看久久久| 99re久久精品国产首页2020| AV色综合久久天堂AV色综合在| 久久久国产精华液| 久久久女人与动物群交毛片 | 久久Av无码精品人妻系列 | 国产成人久久久精品二区三区| 中文字幕成人精品久久不卡|