回覆列表
  • 1 # 飄過1980

    程式由程式碼和資料組成。這兩樣都要從硬碟載入到記憶體裡。記憶體裡的內容格子都有一個地址編號。CPU根據這個編號找到程式和資料的開頭。CPU可以按編號找,人不行啊,於是就有了程式碼中的函式名和變數名。然後由編譯器負責把變數名轉換成記憶體格子的編號。

    int a = 1;b = a;

    其實是把1放到名字是a的記憶體格子裡,假設格子編號是1000;再把a地址裡的資料放到b的記憶體格子裡。假設格子編號是1004,那麼現在記憶體格子1000和1004裡都是1.

    彙編就是 mov [1000],1; mov [1004], [1000]

    //mov 是move的簡寫,就是把右邊放到左邊裡;[1000]就是開啟地址格子1000,往外拿或往裡放東西,視在=左右而定

    指標也是一個變數,是變數就有自己的記憶體格子,它的格子裡存的是一個別的格子的地址編號,當然指標格子也有自己的地址編號。

    int *c;

    宣告的時候帶*,是告訴編譯器我跟別的變數不一樣。假設c自己的編號是1008.

    c = &a;

    &a是說不要抓我格子裡的內容,告訴我我在哪就行了。

    彙編程式碼類似 mov [1008], 1000

    b = *c; *c = 2;

    這裡的*是說,按我格子裡存的編號,去找到那個格子;然後把那個格子裡的東西拿出來,或者把東西放進那個格子。就是說,它比平常的變數多跳了一層格子。

    彙編程式碼類似 mov ax, [1008]; mov [1004], [ax];mov [ax],2 //因為跳了兩次記憶體,所以要藉助暫存器當中間變數,ax應該是1000

    直觀點是這樣 mov [1004], [[1008]] == mov [1004], [1000] //因為 [1008] == 1000

    mov [[1008]], 2 == mov [1000], 2

    簡單點說,就是你自己寫了本書,然後給書編目錄。

    目錄 --- 0

    第一章 --- 1

    第二章 --- 10

    如你所見,頁數這個資訊,它自己也要佔一行。

    指標可以指向自己,比如目錄0在第0頁。

    可以修改,比如你把第一章刪了2頁,那第二章 --- 8.

  • 中秋節和大豐收的關聯?
  • 文員是做什麼的?