c語言指標的學習主要包括以下6個重點:
指標是什麼
指標和指標型別
指標運算
指標和陣列
二級指標
指標陣列
下來就分條詳細總結以上6個重點。
在電腦科學中,指標是程式語言中的乙個物件,利用位址,它的值直接指向(points to)存在電 腦儲存器中另乙個地方的值。由於通過位址能找到所需的變數單元,可以說,位址指向該變數單元。因此,將 位址形象化的稱為「指標」。
通俗來說就是我們在寫程式中建立變數時向計算機記憶體申請了一塊記憶體空間,當我們需要找到這塊空間時,我們就需要通過乙個位址來尋找,這個位址就稱為指標。
變數有不同的型別,所以我們需要存放型別變數的位址時,就需要不同型別的指標變數。
char *pc = null;char* 型別的指標是為了存放 char 型別變數的位址,int* 型別的指標是為了存放 int 型別變數的位址。int *pi = null;
short *ps = null;
long *pl = null;
float *pf = null;
double *pd = null;
指標的型別決定了指標向前或向後走一步有多大距離,並且在指標解引用是,指標的型別決定了對指標解引用能有多大的許可權
例如:char* 的指標解引用只能訪問乙個位元組,而 int* 的指標解引用可以訪問 4 個位元組。
指標可以 +或- 整數,也可以指標 - 指標。但是在絕大多數情況下,指標相加減是沒有意義的。因為記憶體是計算機隨機分配的,它是乙個隨機的值,所以沒有意義。只有在一塊連續的記憶體空間中,指標相加減才有意義。
指標 +或- 整數 代表指向當前的記憶體空間位址向前或向後跳過幾個位元組。
指標 - 指標 代表兩個位址中間隔了幾個位元組。
其實指標和陣列本來沒有任何關係,因為它們是兩個完全不同型別的東西。但是在c語言中,我們在傳陣列的時候,會把陣列名隱式轉化成乙個指標,所以指標和陣列才會有關係。
這樣我們就發現陣列名表示的是陣列首元素的位址。既然可以把陣列名當成位址存放到乙個指標中,我們就可以使用指標來訪問乙個陣列。
我們的陣列名 + 數字 就代表了訪問這個陣列中下標為對應數字的元素。
我們知道指標也是乙個變數,那麼它也有位址,它的位址存在那裡?這個問題就產生了二級指標。
int a =10;
int* pa =
&a;int
**ppa =
& pa;
在上面的**中,a 的位址存放到了 pa 中,我們又把 pa 的位址存放到了 ppa 中。
我們通過對**ppa 的解引用找到了 pa , 在對* pa 的解引用找到了 a。
指標陣列是指標還是陣列?
答案:是陣列。這個陣列中的元素是指標。
例:
int
* arr[5]
;
它的意思是 arr 是乙個陣列,陣列中的每乙個元素是乙個 int 型別的指標。 C語言指標總結
2012 03 07 07 22 標籤 c語言 分類 pointer c語言中的精華是指標,這也是c語言中唯一的難點。c是對底層操作非常方便的語言,而底層操作中用到最多的就是指標,以後從事嵌入式開發的朋友們,指標將陪伴我們終身。1.指標型別分析 分析指標,可以從變數名處起,根據運算子優先順序結合,一...
C語言指標總結
c語言中的精華是指標,這也是c語言中唯一的難點。c是對底層操作非常方便的語言,而底層操作中用到最多的就是指標,以後從事嵌入式開發的朋友們,指標將陪伴我們終身。1.指標型別分析 分析指標,可以從變數名處起,根據運算子優先順序結合,一步一步分析.int p 這是乙個普通的整型變數 int p 首先從 p...
C語言指標總結
指標分析 指標的型別 把指標宣告語句裡的指標名字去掉,剩下的部分就是這個指標的型別 指標所指向的型別 把指標宣告語句中的指標名字和名字左邊的指標宣告符 去掉,剩下的就是指標所指向的型別 在指標的算術運算中,指標所指向的型別有很大的作用 指標本身所佔據的記憶體區 用函式sizeof 指標的型別 可以測...