指標的學習往往很容易搞混。
在我們了解學習指標之前,我們得先知道資料在計算機中的存放。
資料在計算機中是以二進位制檔案儲存的,我們的儲存空間可以理解為以下形式:
計算機是在這種小格仔上存放資料的,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...