指標變數:乙個變數儲存了乙份資料的指標
符號:
& 取位址符
* 乙個特殊符號,表明乙個變數是指標變數
1.1 定義指標變數格式:
資料型別 *變數名;
資料型別 *變數名 = 值(這個值是乙個位址);
int *p //定義p是指向 int 型別資料的指標變數
int *p=&a //定義p是指向a位址的指標變數,且p的值就是a的位址值
注意:1.2 修改指標變數的值int *p=100 //錯誤定義 ×
int *q;
q=&b; //對於已經定義過的指標p,使用時不用再加*號
q++ //int長4byte,q++表示q的位址值加4
注意:1.3獲取指標變數的值q的型別是int * 型,而不是int型
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)的區別2.3 二級指標兩者在記憶體中的儲存區域不一樣
*(str+i)字元陣列儲存在全域性資料區或棧區,有讀取和寫入的許可權
*str[i],字串儲存在常量區,只有讀取許可權,不能寫入
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結構,用於指定測試某個給定描述符發的的...