第九章 指針
第一節 指針基本概念詳解
1. 前提知識
- 靜態存儲區,動態存儲區,不同變量會保存在不同的存儲區裏
-
有些變量的內存是在編譯的時候分配的,有些變量的內存是在程序運行時分配的
-
變量都是會佔用一段內存空間的(int,float,double,char佔用一定內存空間,使用sizeof(類型))
#include <iostream>
int main() {
printf("int size: %d\n", sizeof(int));
printf("double size: %d\n", sizeof(double));
printf("float size: %d\n", sizeof(float));
printf("char size: %d\n", sizeof(char));
return 0;
}
2. 地址的概念
-
傳統意義上地址:我們可以用文字例如XX市XX區XX號來找到對應地址
-
在計算機中:是使用數字來表述地址,計算機習慣用十六進制的形式來表示地址(0x開頭)
-
總結來說,計算機中地址就是數字,代表內存中的位置
-
嚴格區分地址和地址中內容的區別,程序內部會維持一張表(變量名,變量地址的值,變量類型等)
3. 直接訪問和間接訪問
-
直接訪問:按變量地址存取變量值
-
間接訪問:將變量的地址存在另一個內存單元中,
在C語言中,我們一般定義int,char,float,double這些變量,我們一般用這些類型的變量來存值
在C語言中,我們也可以定義一種特殊的變量,這種特殊的變量用來保存地址的 -
假設我們定義了一個變量來存放變量的地址,雖然這種特殊變量是保存地址的,但也
區分保存什麼類型的地址
// 把變量i的地址保存到了mypoint
// 理解成mypoint指向了i,這裏所謂的指向,就是通過地址體現的
// 雖然mypoint是用來存放整型地址的,但是mypoint這種特殊變量也是需要佔內存的
// 這種特殊變量mypoint一般佔四個字節
mypoint =&i;
// 如果我們現在要存取i的值,使用一種間接訪問手段
// a) 首先我們先找到存放i的地址的這個內存位置,也就是mypoint的保存的地址
*mypoint
-
指針變量:如果一個變量專門用來存放另外一個變量的地址,則稱這個變量爲指針變量
-
指針變量的值:就是指針變量存放的值,是個地址,也叫指針
-
區別指針變量(存放地址的變量),地址(指針)