C語言 指標詳解

2021-10-04 18:52:40 字數 2207 閱讀 3644

在日常學習中,我們需要了解的只是:

記憶體中每個位置都是由獨一無二的位址標識

記憶體中的每個位置都包含乙個值

通過指標訪問指向的值的過程稱為間接訪問(indirection)或者叫做解引用指標(dereferencing the pointer),執行間接訪問的操作符就是單目運算子』*』

這裡一定要注意,在變數宣告時使用的』』,與解引用時使用的』'有著本質上的區別,不可以將二者作用混淆

int a =50;

int* b =

&a;//這裡的'*'主要起宣告的作用,告知程式當前變數b是乙個指標型變數

printf

("%d"

,*b)

;//這裡的'*'是單目運算子,對指標型變數b執行取值操作

編寫程式過程中我們往往會定義諸多的變數名實現對值的操控,在這個過程中,變數名與記憶體位址的關聯並不是硬體提供的,它是由編譯器為我們實現的,所有這些變數名給了我們一種更方便的方法記住位址,但是–++硬體仍然通過位址來訪問記憶體位置++
#include

intmain()

執行結果
b=

17824784

*b=50

&b=17824772

int

main()

null作為乙個特殊的指標變數,表示不指向任何位址
int

main()

else

return0;

}

觀察上述程式不難發現,在程式編譯過程中,null指標和0值是完全等價的,這是一種基於源**的約定,有助於我們測試乙個指標變數是否為null ,而null指標的實際值不一定是0

對乙個null指標進行解引用操作是違法的,因為null指標並沒有指向任何內容,所以在對指標進行解引用之前,必須要確定指標是否為空

int a=10;

int* b=

&a;*b=20-

*b;b=20-

*b;

上述第三條語句是合法的,第乙個表示取到該記憶體位址內的變數,對它進行重新賦值,第二個表示,取出該記憶體位址內變數的值,利用值進行計算

第四條語句是非法的,指標變數不能直接作為左值進行賦值操作(k&r c)

int a=50;

int* b=&a;

int** c=&b;

int

mystrlen

(char

* str)

return length;

}int

main()

利用指標遍歷陣列
#include

void

main()

;int sum =0;

int* p1;

for(p1 = score; p1 <

&(score[7]

); p1++

)}

ps:陣列名就是陣列首位元素的位址
int

main()

;int

* num =

&p[0];

int* pnum = num +2;

ptrdiff_t n =

(pnum +1)

- num;

//兩個指標變數之間做差,得到結果是一種有符號整型

//表示兩個指標在記憶體中的距離(以陣列元素長度為單位,而不是位元組長度)

printf

("*num=%d,*pnum=%d\n"

,*num,

*pnum)

;printf

("(pnum+1)-num=%d\n"

, n)

;return0;

}

注意:上述指標之間相減求距離的前提是位於同乙個陣列內,否則結果無意義

ps:同乙個陣列內的指標可以進行』<』,』<=』,』>』,』>='運算,此模擬較表示式可以對指標在陣列中的位置做出比較

運算結果

*num=1,*pnum=3

(pnum+1)-num=3

除了null指標外,再也沒有任何內建的記法用來表示指標常量,因為程式設計師通常無法**編譯器會把變數放到記憶體中哪個位置,當出現極特殊情況我們需要自定義指標常量時,一般採取將整形資料強制型別轉換為指標常量的方式

c語言指標詳解

一.指標的概念 指標是乙個特殊的變數,它裡面儲存的數值被解釋成為記憶體裡的乙個位址。要搞清乙個指標需要搞清指標的四方面的內容 指標的型別,指標所指向的型別,指標的值或者叫指標所指向的記憶體區,還有指標本身所佔據的記憶體區。1.指標的型別 從語法的角度看,你只要把指標宣告語句裡的指標名字去掉,剩下的部...

C語言指標詳解

類似於 int p char p 或者自定義型別的 person p struct p 這些都是基本的指標變數,不管什麼型別的指標變數都是乙個存位址的變數,所以它們的大小都是四個位元組 還有一種void p 型別,類似於 js 或者 c 的 var 可以傳入任何型別變數的位址,也可以轉換成任何型別變...

C語言指標詳解

c語言指標應用 一 指標是什麼 指標是乙個特殊的變數,它存的是記憶體裡的乙個位址。指標四要素 1.指標的型別 把指標名字去掉,剩下的部分就是這個指標的型別。這是指標本身所具有的型別如下 1 int p 指標的型別是int 2 char p 指標的型別是char 3 int p 指標的型別是int 4...