程式由程式碼和資料組成。這兩樣都要從硬碟載入到記憶體裡。記憶體裡的內容格子都有一個地址編號。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.
程式由程式碼和資料組成。這兩樣都要從硬碟載入到記憶體裡。記憶體裡的內容格子都有一個地址編號。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.