c語言學習筆記(十四 指標二

2021-10-12 12:18:25 字數 1395 閱讀 9600

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 指向函式的指標 作用 可以作為另乙個函式的引數...