C 指標學習

2021-08-13 15:28:12 字數 2558 閱讀 7786

之前因為種種原因一直不願意學指標(當然這是藉口,其實是懶外加笨,無論是看書還是聽課都沒學會,直到上次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+2)

=500

;

上面的語句是有效的,且能成功編譯,因為 var 未改變。

C學習 指標

1 指標 a int a 表示乙個記憶體空間,這個空間用來存放乙個整數 int b int a 表示乙個記憶體空間,這個空間用來存放乙個指標,這個指標指向乙個存放整數的空間,即 a 中提到的空間 c int a 表示乙個記憶體空間,這個空間用來存放乙個指標,這個指標指向乙個存放指標的空間,並且指向的...

C 指標學習

一 指標的概念 如果在程式中定義乙個變數,在編譯時系統會自動給這個變數分配記憶體單元,並根據程式中的定義的變數型別,分配一定長度的記憶體空間,這樣的記憶體單元裡放著變數的值。為了便於記憶體單元的訪問,系統為每乙個記憶體單元分配乙個位址。在變數的生存期內,不管以後對變數如何賦值,其記憶體位址都是固定不...

C 學習 指標

關於二級指標的學習遇到了一些困惑,也有了一些不知是否正確的結論。在文章中留個底以記錄學習過程。author 以下是一些暫時的結論 1.將每個變數名都理解成位址 2.注意區分堆與棧中的變數 3.表示取左值 根據位址跳轉 表示取位址 宣告時表示建立乙個引用 ex.char string aaa char...