• <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
            數據加載中……

            在堆上分配內存

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

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



            delete pA; delete[] pB;

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

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

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

            指針

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


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

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

            申請內存 靜態分配動態分配

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


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


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

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

            字符串

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

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

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

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

            在線C++編譯器介紹

            下面的網址是最有名的兩個在線C++編譯網站:

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

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

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

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

            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用于將整型轉換成字符串。編譯器會輸出類似于"literal "3" is not a valid template argument because it is the address of an object with static linkage"的出錯信息。里面的"3"就是你想知道的宏的內容。

            2. 輸出常數
            同樣,浮點數是不能作為模板參數的。編譯器通常會在錯誤信息中包含浮點數的值。利用這一點,我們可以輸出浮點常數。不過很不幸的是,VC會隱式的將浮點類型的模板參數轉換成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中上面的代碼也可以用于輸出常數的值)

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

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

            int main()
            {
                hash_set<> m;
            }

             

            PS:這里也可以使用vector。

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

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

            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 
            編譯參數:
                     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的版本已經相當陳舊了

             

             

             

             

             

             

             


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

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

            賦值語句

            賦值語句
            因此應在變量定義的時候就進行賦值(但是會有性能上的影響,不過很?。猿跏蓟兞慷乐钩霈F莫名其妙的值,在表達式中運用賦值運算符是不好的,即使它可能讓你寫出看起來簡練的語句,但它也使代碼的可維護性降低。


            true 0
            false 非0

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

            棧(Stack) 堆(Heap)


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




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


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


            __________________________________________________________________________________________________

            堆(Heap)

                            
            在Windows操作系統下,由操作系統分配的內存就叫做堆,
                             而??梢哉J為是在程序開始時就分配的堆
                             因此在堆上就可以分配大小變化的內存塊,
                             因為是運行時期即時分配的內存,
                            而不是編譯時期已計算好大小的內存塊。

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

            挑戰30天C/C++ 入門極限系列教程

            挑戰30天C/C++ 入門極限系列教程

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

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

            Visual C++ 2005 系列課程學習筆記

             

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

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

            c++ 開blogs

            c++  開blogs

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

            僅列出標題
            共3頁: 1 2 3 
            99久久亚洲综合精品成人| 久久久久一级精品亚洲国产成人综合AV区 | 一极黄色视频久久网站| 亚洲午夜福利精品久久| 久久笫一福利免费导航 | 波多野结衣AV无码久久一区| 伊人久久大香线蕉综合Av | 久久av高潮av无码av喷吹| 要久久爱在线免费观看| 亚洲国产另类久久久精品| 精品国际久久久久999波多野| 国内精品久久久久久麻豆| 久久午夜福利无码1000合集| 久久久综合九色合综国产| 久久青青色综合| 狠狠久久综合| 久久精品国产亚洲AV高清热| 久久综合视频网站| 久久最近最新中文字幕大全 | 久久电影网2021| 伊人久久无码中文字幕| 久久久久亚洲爆乳少妇无 | 欧美成a人片免费看久久| 久久久精品2019免费观看| 欧洲性大片xxxxx久久久| 91久久精品国产免费直播| 久久久久亚洲AV无码永不| 亚洲精品视频久久久| 久久久久综合国产欧美一区二区 | 人妻无码精品久久亚瑟影视| 国产亚洲欧美精品久久久| 久久中文字幕人妻丝袜| 久久婷婷人人澡人人| 麻豆精品久久精品色综合| 国产精品青草久久久久婷婷| 久久影院综合精品| 人妻精品久久久久中文字幕一冢本| 久久久久免费精品国产| 少妇熟女久久综合网色欲| 一级做a爰片久久毛片看看| 亚洲色欲久久久久综合网 |