指標就是位址,位址就是指標,指標變數就是存放記憶體單元編號的變數。
(1)基本型別的指標
(2)指標和陣列
(3)指標和函式
(4)指標和結構體
(5)多級指標
(1)表示一些複雜的資料結構
(2)快速的傳遞資料
(3)使函式返回乙個以上的值
(4)能直接訪問硬體
(5)能夠方便的處理字串
(6)是理解物件導向語言中引用的基礎
總結來說:指標是c語言的靈魂
變數的指標是乙個位址,而指標變數是存放該位址的變數。同時注意指標變數不能進行加,乘,除運算,可以進行減運算。如果兩個指標變數指向的是同一塊連續空間中的不同儲存單元,此時兩個變數指標才可以相減,多用於陣列計算兩個單元之間相隔的單元數目。
*:這個符號大家都不陌生,在小學的時候就有接觸。它可以代表乘法,在c語言中它就增加了乙個角色,它還可以定義指標變數,比如:int * pointer_1,這就定義了pointer_1為乙個指標變數,用於存放位址比如:pointer_1=&a,就是把a的位址賦給pointer_1,在後面的輸出中:printf("%d\n,*pointer_1")表示的是輸出該pointer_1位址下的內容,注意定義和輸出中的* pointer_1的區別。
指標變數作為函式引數,傳遞的是函式的位址,所以返回值之後,變數的內容也會隨之改變,這就是按位址傳遞。而普通的函式傳遞不會改變原來變數的內容,只是將該變數的內容傳遞給了新的變數,新的變數改變後就馬上釋放了,所以對原來變數沒有造成影響,這就是按值傳遞。
指標作為一維陣列名,存放的是陣列的第乙個元素的位址。比如
a[5]=,a
是第乙個元素的位址,
a是乙個常量,不能改變,與
a[0]
不同,a[0]=1
確定乙個一維陣列需要兩個因素:乙個是陣列第乙個元素的位址,另乙個是陣列的長度
形參與實參都用陣列名
實參用陣列名,形參用指標變數
實參形參都用指標變數
實參為指標變數,形參為陣列名結論:指針對陣列的操作很平常,因為指標可以更方便的來運算元組,提高了查詢的效率。
(1)字元陣列由若干個元素組成,每個元素中放乙個字元,而字元指標變數中存放的是位址(字串第乙個字元的位址),不是把字串放到字元指標變數中。
(2)賦值方式也不同,字元陣列只能對各個元素賦值例如:char str[14]=;,而像字元指標變數可以用以下的方法賦值:char * a;a="i love china!"
(3)指標變數的值是可以改變的。例如:
#include void main()
執行結果如下:china!
但是對於字元陣列不能像下面這樣寫:
#include void main()
; str=str+7;
printf("%s\n",str);
}
結論:用指標變數對字串進行操作會更加方便,簡單。 C語言雜談 指標篇
指標是c語言的難點,其原因是它擁有多重的含義。這給已熟練理解c語言指標精髓的程式設計師帶來的好處是,可以天馬行空的構建軟體。但很不幸,我不是那些能夠熟練理解並天馬行空利用c指標的一員。對於我來說,是不是指標只有置之高閣了呢?答案是否定的,我們前面說過 c指標成為難點的原因是因為它擁有多重含義 這讓我...
C語言雜談 指標篇
指標是c語言的難點,其原因是它擁有多重的含義。這給已熟練理解c語言指標精髓的程式設計師帶來的好處是,可以天馬行空的構建軟體。但很不幸,我不是那些能夠熟練理解並天馬行空利用c指標的一員。對於我來說,是不是指標只有置之高閣了呢?答案是否定的,我們前面說過 c指標成為難點的原因是因為它擁有多重含義 這讓我...
c語言難點 指標篇
相信有很多小夥伴們都入過坑,其實吧,只要多看幾遍,大家都應該能理解,但是呢?我在這裡直接給你們省去了多看幾遍的步驟,如果覺得我寫的不錯的話,點讚收藏一下,如果能給我一點鼓勵的話 算了,我會害羞的,哈哈!廢話不多說,指標呢其實就是乙個資料型別,你把它跟其它型別一樣理解就行了,那麼它所定義的變數跟一般的...