指標歸納總結

2021-10-10 08:09:25 字數 2837 閱讀 9770

指標變數:乙個變數儲存了乙份資料的指標

符號:

& 取位址符

* 乙個特殊符號,表明乙個變數是指標變數

1.1 定義指標變數
格式:

資料型別 *變數名;

資料型別 *變數名 = 值(這個值是乙個位址);

int *p //定義p是指向 int 型別資料的指標變數

int *p=&a //定義p是指向a位址的指標變數,且p的值就是a的位址值

注意:

int *p=100 //錯誤定義 ×

1.2 修改指標變數的值
int *q;

q=&b; //對於已經定義過的指標p,使用時不用再加*號

q++ //int長4byte,q++表示q的位址值加4

注意:

q的型別是int * 型,而不是int型

1.3獲取指標變數的值
int *p=&a;

pringtf("%d",*p); //獲取指標變數p指向的位址的資料,即a

1.4 表示式:
int x = 2;

int y;

int *px = &x;

y = *px + 5; //把x加5並賦給y=7,*px+5=(*px)+5

y = ++*px; //x加1之後賦給y=6,++*px=++(*px)

y = *px++; //相當於y=*(px++),位址增加4

int a=10;	①

int *p=&a; ②

2.1 陣列指標
int arr[5];

int *p=&arr;//等價於int *p = &arr[0]

sizeof(arr):表示獲取a所佔的位元組數,為4x5=20byte

strlen(arr):表示a的長度,即5

2.1.1 指標陣列和二維陣列指標的區別
int *(p1[5]);  //指標陣列,可以去掉括號可寫作int *p1[5];

int (*p2)[5]; //二維陣列指標,不能去掉括號

1.指標陣列是乙個陣列,只是每個元素儲存的都是指標/位址,p1在32位環境下它占用 log(32)×5=20個位元組的記憶體。

2.二維陣列指標是乙個指標/位址,它指向乙個二維陣列,以上面為例,它占用 4 個位元組的記憶體。

2.2字串指標
char str="h0ello"

char *p=str;

或者char *str;

str="hello" //str的型別是char *

printf("%c%c",*(str+i),str[i]);

注意:*str[i]和*(str+i)的區別

兩者在記憶體中的儲存區域不一樣

*(str+i)字元陣列儲存在全域性資料區或棧區,有讀取和寫入的許可權

*str[i],字串儲存在常量區,只有讀取許可權,不能寫入

2.3 二級指標
int a =100;		//定義常量,假設a位址為0x123

int *p1 = &a; //一級指標p1指向a的位址,即存0x123,假設p1位址為0x987

int **p2 = &p1; //二級指標p2指向p1的位址,即存0x987

指標變數可以存放基本型別資料、陣列、函式以及其他指標變數的位址。

1) 指標變數可以進行加減運算,例如p++、p+i、p-=i,但實際是加i個資料型別所佔的byte長度

2) 給指標變數賦值時,要將乙份資料的位址賦給它,不能直接賦給乙個整數,例如int *p = 1000是沒有意義的,使用過程中一般會導致程式崩潰。

3) 使用指標變數之前一定要初始化,否則不能確定指向**,如果指向的記憶體沒有使用許可權,程式就會崩潰。對於沒有指向的指標,可賦值null。

4) 兩個指標變數可以相減。若兩指標變數指向同一陣列中的某個元素,那麼相減的結果就是兩個指標之間的元素個數。

5) 陣列也是有型別的,陣列名的本意是表示一組型別相同的資料。在定義陣列時,或者和sizeof、&運算子一起使用時陣列名才表示整個陣列,表示式中的陣列名會被轉換為乙個指向陣列首位址的指標。

定義

含義int *p;

p可以指向int型別的資料,也可以指向類似int arr[n]的陣列。

int **p;

p為二級指標,指向int*型別的資料。

int *p[n];

p為指標陣列。 的優先順序高於*,所以應該理解為int *(p[n]);

int (*p)[n];

p為二維陣列指標。

int *p();

p是乙個函式,它的返回值型別為int *.

int (*p)();

p是乙個函式指標,指向原型為int func()的函式。

空指標是指向的空間位置就是位址0的指標

野指標就是沒有物件的指標 型別

所佔位元組

char

1char*

32位即log32=4、64位即log64=8

short

2int

4float

4long

4double

8

ps:

const 的含義是「唯讀的」,

「左定值, 右定向」(const位於左 指向的值不變,const位於右側,指標指向不可改變)

指標的歸納

指標 int p char p float p double p snode p struct p int p 二級指標 int p 10 一級指標陣列,存放的是指標 int p1 p 二級指標,p1的值是p的位址,p1等價於p const int p 常量指標,p無法被賦值 int const p...

Select歸納總結

include include int select int maxfdpl,fd set readset,fd set write,fd set exceptset,const struct timeval timeout 返回值 該函式的返回值表示跨所有描述符集的已就緒的總位數。如果在任何描述符...

Poll歸納總結

include int poll struct pollfd fd,nfds t nfds,int timeout 返回 若有就緒操作符則為其數目。若超時則為0。若 出錯則為 1。第乙個引數是指向乙個結構陣列第乙個陣列元素的指標,每個陣列元素都是乙個pollfd結構,用於指定測試某個給定描述符發的的...