• <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 
            久久99国产精品二区不卡| 色综合久久88色综合天天| 精品人妻伦九区久久AAA片69| 99久久综合国产精品免费| 国内精品伊人久久久久妇| 婷婷伊人久久大香线蕉AV| 日本福利片国产午夜久久| 伊色综合久久之综合久久| 99久久人妻无码精品系列| 日日狠狠久久偷偷色综合免费| 日韩av无码久久精品免费| 美女久久久久久| 精品久久一区二区三区| 久久综合久久综合亚洲| 久久中文字幕一区二区| 一本色道久久99一综合| 久久综合给合综合久久| 国内精品伊人久久久久av一坑| 久久久久免费视频| 亚洲狠狠综合久久| 国产亚洲综合久久系列| 久久久久99这里有精品10| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 久久久九九有精品国产| 亚洲伊人久久综合中文成人网| 韩国三级大全久久网站| 香蕉久久夜色精品升级完成| 一级a性色生活片久久无少妇一级婬片免费放 | 亚洲欧美成人久久综合中文网 | 国产精品久久毛片完整版| 久久午夜无码鲁丝片秋霞| 国产伊人久久| 国产精品99久久不卡| 久久婷婷激情综合色综合俺也去| 伊人精品久久久久7777| 日本高清无卡码一区二区久久| 久久影院亚洲一区| 亚洲性久久久影院| 漂亮人妻被中出中文字幕久久 | 亚洲午夜精品久久久久久浪潮 | 99久久国产热无码精品免费|