之前因為種種原因一直不願意學指標(當然這是藉口,其實是懶外加笨,無論是看書還是聽課都沒學會,直到上次c++實驗課老師要求必須用指標寫,我(╯‵□′)╯︵┻━┻)。
先從最基本的問題開始,我們每學乙個知識,都要知道學這個知識是幹什麼的(無非是提公升能力素養或者陶冶情操什麼的),那麼指標有什麼用呢?
在電腦科學中,指標(pointer)是程式語言中的乙個物件,利用位址,它的值直接指向(points to)存在電腦儲存器中另乙個地方的值。由於通過位址能找到所需的變數單元,可以說,位址指向該變數單元。
我特別能理解第一次接觸這段話,並且還沒有學過或者了解資料結構的小白的感受(因為我就是啊),看到這段話,其實是很懵的,完全不知所云。
好吧,那我們先來初步了解一下資料結構是什麼?
下面是摘自資料在計算機中的儲存的解釋。
資料有數值型和非數值
型兩類,這些資料在計算機中都必須以二進位制形式表示。一串二進位制數既可表示數量值,也可表示乙個字元、漢字或其他。一串二進位制數代表的資料不同,含義也不同。這些資料在計算機的儲存裝置中是如何進行組織儲存的?
資料單位
位(bit)
位(bit),音譯為"位元",是計算機
儲存裝置
的最小單位,由數字0或1組成。
位元組(byte)
位元組(byte),簡寫為"b",音譯為"拜特",簡寫為"b"。8個二進位制位編為一組稱為乙個位元組,即:1b=8bit。
位元組是計算機處理資料的基本單位,即以位元組為單位解釋資訊
。通常,
乙個ascii碼佔1個位元組;乙個漢字國標碼佔2個位元組;整數佔2個位元組;實數,即帶有小數點的數,用4個位元組組成浮點形式等。
字(word)
計算機一次訪問、處理和傳輸的資料長度稱為字
,即:一組二進位制數碼作為乙個整體來參加運算或處理的單位。乙個字通常由乙個或多個位元組構成,用來存放一條指令或乙個資料。
字長
乙個字中所包含的二進位制數的位數稱為字長
。不同的計算機,字長是不同的,常用的字長有8位、16位、32位和64位等,也就是經常說的8位機、16位機、32位機或64位機。例如,一台計算機如果用8個二進位制位表示乙個字,就說該機是八位機,或者說它的字長是8位的;又如,乙個字由兩個位元組組成,即16個二進位制位,則字長為16位。
字長是衡量計算機效能的乙個重要標誌。字長越長,一次處理的數字位數越大,速度也就越快。
編址與位址
編址對計算機儲存單元編號的過程稱為"編址",是以位元組為單位進行的。
位址儲存單元的編號稱為位址。
1.記憶體中的每個位置都由乙個獨一無二的位址表示.
2.記憶體中的每個位置都包含乙個值.
===》我們可以通過乙個位址,來找到記憶體中的某個具體位置,然後訪問到(得到)該位置的值(允許的話).這就是記憶體和位址簡單的思想
.
其實……
用指標的原因就是因為……
方便……
當然,在知乎上也有很多解答,感興趣的話可以去看看為什麼要有指標
書歸正傳,先看一段**:
/*指標學習。
之前一直固執的不學指標(其實是被oj嚇的,以前剛剛學陣列的時候就見到有報錯,說我是陣列越界或者是指標無意義,感到了無限的恐懼--->因此就沒再學指標了)*/
#includeusing namespace std;
int main()
; int *ptr;
// 指標中的陣列位址
ptr = var;
for (int i = 0; i < max; i++)
return 0;
}
當上面的**被編譯和執行時,它會產生下列結果:
var[0然而,指標和陣列並不是完全互換的。]的記憶體位址為
0x7fff59707adc
var[0]
的值為10
var[
1]的記憶體位址為
0x7fff59707ae0
var[1]
的值為100
var[
2]的記憶體位址為
0x7fff59707ae4
var[2]
的值為200
#include using namespace std;
const int max = 3;
int main ();
for (int i = 0; i < max; i++)
return 0;
}
把指標運算子 * 應用到 var 上是完全可以的,但修改 var 的值是非法的。這是因為 var 是乙個指向陣列開頭的常量,不能作為左值。
由於乙個陣列名對應乙個指標常量,只要不改變陣列的值,仍然可以用指標形式的表示式。例如,下面是乙個有效的語句,把 var[2] 賦值為 500:
*(上面的語句是有效的,且能成功編譯,因為 var 未改變。var+2)
=500
;
C學習 指標
1 指標 a int a 表示乙個記憶體空間,這個空間用來存放乙個整數 int b int a 表示乙個記憶體空間,這個空間用來存放乙個指標,這個指標指向乙個存放整數的空間,即 a 中提到的空間 c int a 表示乙個記憶體空間,這個空間用來存放乙個指標,這個指標指向乙個存放指標的空間,並且指向的...
C 指標學習
一 指標的概念 如果在程式中定義乙個變數,在編譯時系統會自動給這個變數分配記憶體單元,並根據程式中的定義的變數型別,分配一定長度的記憶體空間,這樣的記憶體單元裡放著變數的值。為了便於記憶體單元的訪問,系統為每乙個記憶體單元分配乙個位址。在變數的生存期內,不管以後對變數如何賦值,其記憶體位址都是固定不...
C 學習 指標
關於二級指標的學習遇到了一些困惑,也有了一些不知是否正確的結論。在文章中留個底以記錄學習過程。author 以下是一些暫時的結論 1.將每個變數名都理解成位址 2.注意區分堆與棧中的變數 3.表示取左值 根據位址跳轉 表示取位址 宣告時表示建立乙個引用 ex.char string aaa char...