1.指標的算術運算
char a[20]
;int
*ptr=
(int
*)a;
//強制型別轉換並不會改變a 的型別
ptr++
;
指標ptr 的值加上了sizeof(int),由於位址是用位元組做單位的,故ptr 所指向的位址由原來的變數a 的位址向高位址方向增加了4 個位元組。
2.&和*
這裡&是取位址運算子,*是間接運算子。
&a 的運算結果是乙個指標,指標的型別是a 的型別加個*,指標所指向的型別是a 的型別,指標所指向的位址是a 的位址。
*p 的結果是p 所指向的東西,它的型別是p 指向的型別,它所占用的位址是p所指向的位址。
3.陣列和指標
int b[10]
;b[4]
=3;
找到符號b,然後發現其型別為int(假想表達方式,c語言中不支援這樣寫),所以計算式變成了0x1008+4×sizeof(int)=0x1018,然後把3放入0x1018就可以了。用乙個式子表達就是*(0x1008+4)=3。
4.指標和結構型別
struct mystruct
;//宣告了結構物件ss,並把ss 的成員初始化為20,30 和40。
struct mystruct ss=
;//宣告了乙個指向結構物件ss 的指標。它的型別是mystruct *,它指向的型別是mystruct。
struct mystruct *ptr=
&ss;
//宣告了乙個指向結構物件ss 的指標。但是pstr 和它被指向的型別ptr 是不同的。
int*pstr=
(int*)
&ss;
ptr->a;
//指向運算子,或者可以這們(*ptr).a,建議使用前者
ptr->b;
ptr->c;
*pstr; //訪問了ss 的成員a。
*(pstr+1)
;//訪問了ss 的成員b。
*(pstr+2)
//訪問了ss 的成員c。
5.指標和函式的關係
把乙個指標宣告成為乙個指向函式的指標。
int
fun1
(char*,
int)
;int
(*pfun1)
(char*,
int)
;pfun1=fun1;
int a=
(*pfun1)
("abcdefg",7
);//通過函式指標呼叫函式。
6.指標型別轉換
強制型別轉換p=(int*)&f;
C語言學習筆記 指標
若觸過組合語言,那麼理解學習c語言中指標就很簡單了。指標,在彙編裡面的表現形式,無非就是定址,直接定址和間接定址。先來學習下,c語言中的4大類資料型別 基本型別 int,long,float,char 構造型別 陣列,結構體 struct,聯合體 union,列舉型別 enum 指標型別 int l...
C語言學習筆記 指標
c語言要玩的好,指標是核心,但是指標在學習的時候看教程往往感覺一看就明白,但是實際用的時候一用就錯,而且還不知道錯在哪。為了更加深刻的了解指標,將學習過程記錄下來,依次加深對指標的理解。先看看一段測試 void fun void int main void 定義乙個變數a,值為100,然後定義乙個一...
C語言學習筆記 指標
get新知識 1 指向二維陣列的指標,如指向int a 3 4 的指標int p 4 p指的是第0行第乙個位址 注意是位址 p 1 指的是第1行第乙個位址,以此類推 p i j 表示第i行第j列的元素。二維陣列本質也是一維陣列。每一行相當於乙個元素。2 指向函式的指標 作用 可以作為另乙個函式的引數...