重拾指標(整理自乙個知乎上非常不錯的回答)

2021-08-04 09:15:15 字數 1488 閱讀 1306

大一上學期的時候學的c語言,在那時侯接觸的指標相關知識。過去半年果然把指標忘乾淨了。。。。

今天利用剩餘時間把指標相關知識複習一遍,把指標搞通!

2).*操作符:對指標進行解引用的操作

記憶體可以簡化為一系列相連的無限長的單元,在單元中存放著數字,每個單元格為 1bite(1位元組),計算機的工作就是對這些單元格裡的數字進行處理。對每個單元格上的數字能夠採取的操作只有寫入和讀取兩種操作。因為每個單元格都有自己獨有的編號,所以可以通過單元格的位址對單元格中的數字進行操作。

例如:

unsigned char a  = 1;//每個unsigned char 佔乙個位元組。

unsigned char* b = &a;//利用&取出變數a的位址,並將a的位址存在b的單元格中。

printf("%d", *b); //對指標b進行解引用操作得到a中存的值。

2.關於指標變數所佔記憶體大小的理解

因為每個單元格只佔乙個位元組,許多變數都需要多個位元組來儲存,比如int型就需要四個位元組。故,不同指標型別所表示的變數所佔位元組數是不同的(佔的單元格數也不同)。

由此引入指標型別的概念,對於int型的指標型別,是指從變數開頭往下算四個單元格,而unsigned char型則只表示變數當前的格仔。不同指標變數之間的轉換需要強制型別轉換。

例如:

unsigned int c   = 257;

3)計算機使用二進位制表示數字。

對所有unsigned的整形變數來說,二進位制的值本身就代表了他自己的數值,257轉換成二進位制是:100000001,int型就是4個位元組。因為8位數字占用乙個位元組,所以int型就是32位數,補齊0後得到:00000000 00000000 00000001 00000001.8個8位數字轉換成10進製,上面的數字即為0011.機器在讀取時看到是個int*型指標,故讀取對應位址的四個位元組所存的數字,反之機器在讀取是看到是char*型指標,只會讀取位址對應的第乙個單元格。

4)關於指標的運算

假設有乙個指標a,那麼a+1所代表的就是加上a的型別所佔位元組數所得到的新位址。至於指向不同資料型別的指標下一步後所指向位址的大小的不同在於指標的步長,指標步長由編譯器所決定。

減法也是乙個意思,只不過對應的變數位址是從當前往前追溯對應資料型別所佔的格仔。

指標之間可以相加,但是相加得到的結果沒有意義。

5)關於指標變數的大小

指標的大小由所存位址的寬度決定,和對應資料型別無關。

整理到現在差不多了,在整理的過程中突然很想學機器學習,或許這就是我的興趣所在吧。。

C語言整理 九 (指標)

記憶體是以位元組為單位的連續的儲存空間,每個記憶體單元都有乙個編號,稱為記憶體位址。指標就是在記憶體中存放的是別的地方的位址,通過訪問指標我們可以直接獲得儲存單元裡那個位址所儲存的內容。形式 資料型別 指標變數名 要注意的是指標的寬度,比如int就是4個位元組,float就是8個位元組。指標只是儲存...

C 筆記整理8 指標 (總複習)

到指標了呀,c語言的精華之所在。正確的使用指標,可以有效地表示複雜的資料結構 動態地分配記憶體 方便地使用字串 有效而方便地使用陣列及直接處理記憶體位址等。辨別乙個人是新手還是老手的第二步就是看他能否靈活地使用指標 指標 通過變數名a直接訪問變數名a內的資料。2,間接訪問 將變數a的位址存放在另乙個...

一 指標就是位址

首先明確乙個觀點 指標就是位址。這是理解指標的起始一步。直觀感受下,變數的位址 幾點說明 p中的p是pointer 指標 的意思,專門用於列印指標變數中的內容。有時看到用 x列印指標的,雖然結果一樣,但含義完全不同。p 用合適的方式 一般是十六進製制 輸出指標變數中存放的另乙個變數的位址 x 用十六...