C語言學習 指標的學習理解

2021-10-21 20:54:52 字數 1805 閱讀 3119

指標的學習往往很容易搞混。

在我們了解學習指標之前,我們得先知道資料在計算機中的存放。

資料在計算機中是以二進位制檔案儲存的,我們的儲存空間可以理解為以下形式:

計算機是在這種小格仔上存放資料的,cpu之所以會那麼快找到資料,是因為每乙個小格仔都有它的名字,我們就叫它的名字為:位址!!!

我們的指標,就是指向位址的小箭頭,當我們需要找資料時,我們只要拿到存放著這個資料的位址,我們就能找到資料進行我們想要的操作。通俗一點的理解:就像我們不知道朋友住在酒店的那個房間,但是只要他告訴我們的房間號,我們就能找到房間並且找到我們的朋友。我們資料的位址、指標也是這個道理。

指標的學習跟陣列、字元的學習一樣。分為幾個模組:

1.指標的型別 2.指標的定義 3.指標的賦值 4.指標的使用
2.指標的定義:

指標的定義資料變數的定義一樣,只是有「*」這個符號的不同

以整形指標為例:型別名 指標名

int *p

當想一次定義多個指標時,格式也有點不同:

int *p,*q,*o;(正確);int p,q,o;(錯誤)

3.指標的賦值:

指標是要賦值初始化的,不然會變成野指標,造成段錯誤。段錯誤編譯的時候不會出警報,但是執行不了,對我們的程式設計影響較大應該避免。下面就是沒有初始化的結果:(如果不懂p就先看文章最後面的解釋)

int main()

int main()

//執行效果

//執行效果

;

int (*p)[4] = a;//二維指標

printf("p = %p,a = %p\n",p,a);

printf("*p = %p,a[0] = %p\n",*p,a[0]);

printf("**p = %d,a[0][0] = %d\n",**p,a[0][0]);

//此時a是二維陣列的位址,p指向二維陣列的位址

//a[0]是二維陣列中,第一列的位址

//&a[0][0]是二維陣列首元素位址

//a=a[0]=&a[0][0]=首元素位址,但是他們只是位址值相等!!!

//來看看他們和指標的關係

//p = a; *p = a[0]; **p = a[0][0]

}//執行效果

對比**執行圖,理解指標指向什麼地方,一定不要搞混。

符號「*」的理解:p我們稱為解引用。通俗的理解為:相當於房間的鑰匙,我們整形變數a上了一把鎖,二維陣列上了兩把鎖,每次p就是開鎖(取位址)的過程,一步一步開啟房間,找到裡面的資料。

總結:1.指標是一種新的型別。

2.指標指向位址,存放位址。

3.解引用「*」是解鎖過程,最終結果是為了找到裡面的資料。

4.二維陣列中,雖然a=a[0]陣列首元素位址,但是a要解兩次指標才能得到結果

5.字元陣列可以理解為二維陣列,很特殊,只需提供陣列位址就可以輸出全部的資料,但是要輸出單個的資料,需要我們解引用或者用a[n]的這種辦法。

C語言學習指標

恢復內容開始 一.運算子 scanf d i 裡的 獲得變數的位址,它的運算元必須是變數 int i printf x i 位址的 大小是否與int相同取決於編譯器 int i printf p i 不能對沒有位址的取位址 a b a a 二.指標初識 就是儲存位址的變數 int i int p i...

C語言學習筆記 指標

若觸過組合語言,那麼理解學習c語言中指標就很簡單了。指標,在彙編裡面的表現形式,無非就是定址,直接定址和間接定址。先來學習下,c語言中的4大類資料型別 基本型別 int,long,float,char 構造型別 陣列,結構體 struct,聯合體 union,列舉型別 enum 指標型別 int l...

C語言學習 指標(10 19)

1.p是位址的轉義字元 2.位址值是用十六進製制的無符號整數表示的,其字長一般與主機的字長相同。3.int pa pa是乙個指標變數,它指向乙個整形變數 是指標型別說明符 4.習慣上在定義指標變數的同時將其初始化為null,未被初始化意味著它的值是乙個隨機值,無法預知它指向 會給系統帶來潛在危險。5...