• <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>

            cc

              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
              38 隨筆 :: 14 文章 :: 21 評論 :: 0 Trackbacks

            前面講到“白馬、黑馬”時,我們說一匹白馬和一匹黑馬具有共同的數據類型“馬”,但二者是相對獨立的個體。現在我們以共熟悉的“人”來繼續這個話題,最終引出變量與內存地址的關系。

            張三和李四的數據類型都是“人類”。但張三和李四顯然是獨立的量:張三吃了兩塊蛋糕,李四不可能因此就覺和肚子飽了;而李四在下班的路上撿到一個錢包,雖然正好是張三的,兩人似乎通過錢包有了點關系,但誰得誰失仍然不容混淆。

            這一切都很好理解。張三和李四之所以是不同的個體,根本原因在于兩人有著不同的肉身。如果是一對連體嬰兒,雖然也是兩個人,但當左邊的嬰兒被蚊子咬一口時,右邊嬰兒是否也會覺得癢,就不好說了。

            現在我們困難的是,如何理解兩個不同的變量,也是互相獨立的呢?

            答案就在“內存地址”,“內存地址”就是變量的肉身。不同的變量,擁有不同的內存地址。譬如:

             

            char a;

            char b;

             

            上面有兩個字符類型的變量a和b,a擁有自已的內存地址,b也擁有自已的內存地址,二者絕不相同。而a、b只不過分別是那兩個內存地址的“名字”,恰如“張三、李四”。

             

            讓我們看圖解:

            看,內存就像是開賓館的。不過這有賓館有點怪。首先它每一個“房間”的大小都是一個字節(因此,計算機能單獨處理的最小內存單位為字節)。它的門牌號也不叫房號,而是叫內存地址

            在左圖中,“房客”,變量a住在內存地址為1000002的內存中,而變量b則住在它的隔壁,地址為100003的內存中。另外,如果你足夠細心,你還會發現:內存地址由下往上,從小到大排列

             

            變量的內存地址是在程序運行時,才由操作系統決定。這就好像我們住賓館。我們預定一個房間,但房間號由賓館根據情況決定,

            我們可以改變變量的值,但變量的地址我們無法改變。對照賓館一說,就是我們訂了房間,可以不去住,還可以決定讓誰去住在那個房間里。(當然,現實生活中賓館可能不會允許你這么做)。

             

             

             

             

            在前面圖示的例子中,a、b是字符(char)類型。各占用1個字節。如果是 int類型,那么應該占4個字節。這4個字節必須是連續的。讓我們再來看一個例子:

             

            int a;

            int b;

            char c;

             

            這回,我們聲明了兩個int類型和一個char類型的變量。同時和上面一樣,我們事實上是假設了這三個變量被依次序分配在相鄰的內存地址上(真實情況下,這和其它因素,如指定的字節對齊方式等有關)。從右圖中可以看到整型變量a占用了1000001~100004這4個字節。

             

            在我們已學習的數據類型中,long double占用10個字節,是占用內存空間最大的一種數據類型。以后我們學習數組,或者用戶自定數據類型,則可能要求占用相當大的,并且同樣必須是連續的空間。因此,如果操作系統僅僅通過簡單的“按需分配”的原則進行內存管理,內存很快就會宣告不足。事實上,操作系統的內存管理相當復雜。幸好,一個普通的程序員并不要求去了解這些內幕。更多的有關內存管理的知識,我們會在下一部課程中學習。但是本章中有關內存的內容卻相當重要。

             

            讓我們來看看我們學了什么:

            1、不同的變量,存入在不同的內存地址,所以變量之間相互獨立。

            2、變量的數據類型決定了變量占用連續的多少個字節。

            3、變量的內存地址在程序運行時得以確定。變量的內存地址不能改變。

             

            除了這些以外,我們現在還要增加幾點:

            現在,我們可以明白,為什么需要變量,顯然,這又是一個討好人類的做法。在匯編和機器語言,就是只對內存進行直接操作。但你也看到了,內存地址是一堆長長的數,不好記憶;另外,管理內存復雜易錯,讓程序員直接管理內存顯示不可能。而通過變量,不僅讓內存地址有了直觀易記的名字,而且程序員不用直接對內存操作,何樂而不為呢?事實上,這是所有高級語言賴于實現基礎。

            既然變量只不過是內存地址的名稱,所以:

            4、對變量的操作,等同于對變量所在地址的內存操作。

            第五點是反過來說:

            5、對指定內存地址的內存操作,等同對相應變量的操作。

            盡管這簡直就是在重復。但這一條卻是我們今后理解C、C++語言相對于其它很多高級語言的,最靈活也最難學的“指針”概念的基石。

            posted on 2009-11-20 19:07 醒目西西 閱讀(1288) 評論(0)  編輯 收藏 引用
            亚洲精品国精品久久99热| 91久久婷婷国产综合精品青草| 久久久久av无码免费网| 久久精品国产欧美日韩| 久久精品国产精品国产精品污| 久久久久久夜精品精品免费啦| 2021国产精品久久精品| 合区精品久久久中文字幕一区| 94久久国产乱子伦精品免费| 久久精品国产亚洲av影院| 久久精品亚洲一区二区三区浴池| 久久精品aⅴ无码中文字字幕重口| 日本人妻丰满熟妇久久久久久| 亚洲级αV无码毛片久久精品| 最新久久免费视频| 亚洲熟妇无码另类久久久| 人妻无码中文久久久久专区| 久久国产精品无码HDAV| 国产91色综合久久免费| 精品人妻久久久久久888| 青青青伊人色综合久久| 久久国产成人精品国产成人亚洲| 人妻无码久久精品| 日韩精品久久久肉伦网站| 久久精品国产一区二区三区日韩| 国产女人aaa级久久久级| 久久精品极品盛宴观看| 伊人久久成人成综合网222| 中文国产成人精品久久不卡| 久久精品无码专区免费青青| AA级片免费看视频久久| 超级碰碰碰碰97久久久久| 亚洲va久久久噜噜噜久久| 久久ww精品w免费人成| segui久久国产精品| 亚洲AV无码成人网站久久精品大| 国产美女久久精品香蕉69| 一个色综合久久| 久久精品国产影库免费看| 亚洲人成网站999久久久综合| 久久精品99久久香蕉国产色戒|