C預言指標詳解(上)

2021-08-20 09:03:59 字數 1873 閱讀 7586

一、指標是什麼

指標是程式語言中的乙個物件,利用位址,它的值直接指向存在電腦儲存器中另乙個地方的值。由於通過位址能找到所需的變數單元,可以說位址指向該變數單元。因此,將位址形象化的稱為「指標」。意思是通過它能找到以它為位址的記憶體單元。

指標就是變數,用來存放位址的變數。(存放在指標中的值都被當成位址處理)

二、為什麼存在指標

將計算機的記憶體分成了很多個小的單元,每個單元都對應獨一無二的位址,這樣就乙個位址標示一塊空間。

在這裡我們還要明白:

1)指標(指標變數)是存放位址才出現的,位址(指標)是為了標誌一塊位址空間的

2)指標(指標變數)讓位址有地方可存,同時讓記憶體的訪問更加方便

3)指標的大小在32位平台下是4個位元組,在64位平台下是8個位元組

三、指標和指標型別

指標式有型別的型別:

type + *(type決定了指標每次需要連續讀取多少位元組的內容)

:(1)int*ptr;//指標的型別是int*

(2)char*ptr;//指標的型別是char*

(3)int**ptr;//指標的型別是int**

(4)int(*ptr)[3];//指標的型別是int(*)[3]

(5)int*(*ptr)[4];//指標的型別是int*(*)[4]

對指標+1,是將其加上所指向型別的大小:

char *pc = null, pc++; --> 加1個位元組

int *pi = null, pi++; --> 加4個位元組

float *pf = null, pf++; --> 加4個位元組

指標的解引用

指標所指向的目標變數

總結:指標的型別決定了,對指標解引用的時候有多大許可權(能操作幾個位元組)

比如:char*的指標解引用就只能訪問乙個位元組,而int *的指標的解引用就能訪問四個位元組。

四、二級指標

二級指標就是存放一級指標的位址。

五、指標表示式解析

char ch = 'a';

char *cp = &ch;

那下面**能否做左值?能否做右值?

&ch; --> 右值 --> 位址常量

cp; --> 左值、右值 --> 指標變數

&cp; --> 右值 --> 位址常量

*cp+1; --> 右值 --> 表示式的結果是常量

*(cp+1); --> 左值、右值 --> 表示ch之後的一塊空間

++cp; --> 右值 --> c語言中前置++只能做右值

cp++; --> 右值 --> c語言中後置++只能做右值

*(++cp); --> 左值、右值 --> 表示ch之後的一塊空間

*(cp++); -->  左值、右值 --> 使用ch變數之後指向ch之後的一塊空間

++*cp; --> 右值 --> c語言中前置++只能做右值

(*cp)++; --> 右值 --> c語言中後置++只能做右值

++*++cp; --> 右值 --> c語言中前置++只能做右值

++*cp++; --> 右值 --> c語言中後置++只能做右值

六、指標運算

1.指標+-整數

每次加減1是加減其所指向型別的大小

2.指標-指標

指向同一陣列的兩個指標相減,計算的是兩指標之間的元素個數,元素的型別由這兩個指標的型別決定

標準規定:

允許指向陣列元素的指標與指向陣列最後乙個元素後面的那個位置的指標比較(越界訪問)

不允許與指向第乙個元素之前的那個記憶體為止的指標進行比較

C 指標詳解

指標是乙個特殊的變數,它裡面儲存的數值被解釋為記憶體裡的乙個位址。要搞清乙個指標需要搞清指標的四方面的內容 指標的型別,指標所指向的型別,指標的值或者指標所指向的記憶體區,還有指標本身所佔據的記憶體區。去掉宣告中指標的名字,剩下的就是指標的型別。例如 int ptr 指標的型別是int char p...

C 指標詳解

前言 今天發現自己對c 了解得還不夠深刻,毅然決定重新補充c 指標的知識。一直在論壇裡聽別人說沒有幾個人真正的會用指標,我居然懷疑了一下自己,好吧。惡補唄,順便寫篇部落格祭奠一下,這篇文章適合非小白看,我只是把容易錯的點補充了。1.資料在記憶體中是如何儲存的 在編譯時就會系統就會給變數分配記憶體空間...

詳解C指標

指標是乙個特殊的變數,它裡面儲存的數值被解釋成為記憶體 使用者空間的虛擬記憶體 裡的乙個位址。乙個指標包含四個方面的內容 指標的型別 指標所指向的型別 指標所指向的記憶體區 指標本身所佔據的記憶體區。接下來就下面幾個例子作說明 1 int p 2 char p 3 int p 4 int p 3 5...