指標啊指標

2021-08-18 03:38:01 字數 2087 閱讀 2082

一、指標是個什麼鬼

指標就是變數的位址,指標變數就是有乙個變數,它的值是指標。也就是說這個變數的值是乙個位址。

醬無論是一級指標還是二級指標,這個變數的值都只是乙個位址而已。關鍵在於我們怎麼去使用這個值。

通過一段**來說明指標

指標的賦值

通過彙編可以

更清晰的分析指標的本質,p的值實際上就是

-12(%rbp),也就是指標。

一級指標:

二級指標:

通過上面的**,我們已經大致知道了指標到底是個什麼鬼。

二、指標的相關宣告

例:int x;  //x是變數,int是型別

那麼我們宣告乙個指標

int *p;     //*p 說明p是乙個指標變數, 指向的是乙個

intint **p;    //===>(int *)(*p)  *p說明是乙個指標,指向的是乙個(int*)

int (*p)[5];   //*p說明p是乙個指標,指向的型別是int [5]

void (*p)(int,int); //*p是乙個指標,指向的型別是void(int,int)

int *p[5]; //==>(int *)(p[5])  p是乙個5元素陣列,陣列元素型別是int *

三、陣列作為函式引數

void func(int a[10]);

=>void func(int *a);

int (a[10]) 首先a是乙個

10元素陣列,然後陣列元素是

intvoid func(int a[10][8]);

=>int func(int (*a)[8]);

int (a[10])[8] 首先a是乙個

10個元素的陣列,然後陣列元素是int [8](也就是8個

int的陣列,總結就是:a是乙個

10個元素的陣列,陣列元素是乙個有8個

int的陣列)

四、指標的運算

最常見的是指標的自增

如:void mstrcpy(char *dest, char *src)

關於指標自增

如char *p;

上面的表示式實際上可以解釋為(char) (*p)

p++,關鍵是看指標的指向的型別,對於p指向的是乙個char,那麼p++便是前進

1個位元組。

如 char **p;

==>(char*) (*p)

p++,可以看出來p指向的型別是

char*,那麼p++,便是前進

4個位元組。

其實只要理解,運算子優先順序,上面的一些例子就很容易明白。

乙個例子:

#include #include #include char *a0 = ;

char *a1 = ;

char *a2 = ;

char *a3 = ;

char *a4 = ;

char *a5 = ;

char *a6 = ;

char *a7 = ;

char *a8 = ;

char *a9 = ;

char *sp = ;

void copy(char **p1, char **p2, char ***p)}

void print(char **p, int size)}

int main(void)

free(p);

return 0;

}

指標,指標,指標。。。

1 指標常量與常量指標 int a 10 int const p1 a const int p2 a p1是不可改變位址的常量,即指標常量,但可以對它所指向的內容進行修改。p2是指向常量的指標,即常量指標,它所指向的位址內容是不可修改的,但其本身確實可以修改的。2 指標運算 includeint m...

指標,指標,指標。。。

1 指標常量與常量指標 int a 10 int const p1 a const int p2 a p1是不可改變位址的常量,即指標常量,但能夠對它所指向的內容進行改動。p2是指向常量的指標,即常量指標,它所指向的位址內容是不可改動的,但其本身確實能夠改動的。2 指標運算 includeint m...

指標,指標,又見指標

在xcode中寫了一段下面的 nsstring s1 hi,i am sean nsstring s2 hi,i am sean nsstring s3 nsstring stringwithformat hi,i am sean s3 s1 if s1 s2 在debug模式看了一下,發現s1和s...