1.記憶體地址就是一個編號,這些編號都是連續的,稱作地址。編號對應的記憶體以位元組為單位劃分。 2.記憶體地址的大小與數據匯流排的位數有關 3.記憶體訪問分為:直接訪問和間接訪問 ①直接訪問:直接訪問記憶體單元中的內容 示例: int a = 20 ; 對於直接訪問,a代表存放數據的記憶體單元,通過對a賦值或者取值
1.記憶體地址就是一個編號,這些編號都是連續的,稱作地址。編號對應的記憶體以位元組為單位劃分。 2.記憶體地址的大小與數據匯流排的位數有關 3.記憶體訪問分為:直接訪問和間接訪問 ①直接訪問:直接訪問記憶體單元中的內容 示例: int a = 20 ; 對於直接訪問,a代表存放數據的記憶體單元,通過對a賦值或者取值,實現對記憶體的訪問 ②間接訪問:通過記憶體單元編號(地址)以及數據所占位元組數訪問記憶體中的數據 間接訪問在程式中隨處可見,通過指針實現記憶體的間接訪問 4.指針:就是地址。記憶體地址,我們習慣上把記憶體地址叫做指針。 5.地址:記憶體編號。記憶體地址可以簡稱為地址。“&”查看一個變數的記憶體地址。“%p”列印地址 6.關鍵符號:“&”取地址符 7.指針變數:存儲記憶體地址的變數 8.定義指針變數:需要在前面加* 此時 * 僅僅起到表示作用,告訴編譯器 p 一個存放 地址 的變數,p是一個指針變數 示例: int a = 20; int *p = &a;//(int *)p = &a; 9.取值符號 * 使用 * 號訪問記憶體編號裡面對應的內容 示例: int a = 5;//定義一個整型 int *p = NULL;//定義一個指針變數,地址為空 p = &a;//獲取a的地址 printf(“%d”,*p);//*p獲取a中的內容 10.給指針變數賦值,意味著指針的重指向 11.指針的類型: ①因為記憶體地址只跟操作系統有關,所以指針變數所占的記憶體大小取決於操作位數(32位系統指針占4個位元組,64位系統指針占8個位元組) 示例: int *p = NULL; double *p1 = NULL; float *p2 = NULL; long *p3 = NULL; char *p4 = NULL; printf(“%lu\n”,sizeof(p));//8個位元組 printf(“%lu\n”,sizeof(p1));//8個位元組 printf(“%lu\n”,sizeof(p2));//8個位元組 printf(“%lu\n”,sizeof(p3));//8個位元組 printf(“%lu\n”,sizeof(p4));//8個位元組 因為只要是地址,都是8個位元組。地址位元組數與數據類型無關,數據類型管控從哪開始取,取多少位元組。 ②int *p 整型指針 double *p 雙精度指針 char *p 字元指針 ③不同類型的指針,訪問的記憶體大小不一樣 12.記憶體怎麼來的 ①手動申請(malloc函數) ②系統分配(定義變數的記憶體空間都是系統分配的) 13.指針變數加減一個常數,指針本身不移動 14.指針變數自增自減,指針移動,地址發生變化。 15.指針類型一定要和指向記憶體中的數據類型一致。 16.補碼:①符號位不變②其他位取反③最後一位加1 17.數組名是一個符號地址常量,不是變數,所以不能自增、自減