摘要
- 指針的定義
- 指針指向的內(nèi)容
- 指針的運算
- 指針數(shù)組
- 數(shù)組指針
- 指針與函數(shù)
指針的定義
- 指針是一個保存地址的變量毛肋,只能存地址爱致,占據(jù)8個字節(jié)
int main(){ int *a; printf("a的大小:%d\n",sizeof(a)); printf("a的地址:%p\n",a); return 0; }
result
- 指針聲明
- 聲明一個指針變量時,并不會自動分配內(nèi)存畅哑。
- 在對指針進(jìn)行間接訪問之前旭绒,指針必須進(jìn)行初始化【┝。或是使他指向現(xiàn)有的內(nèi)存奶甘,或者給他分配動態(tài)內(nèi)存,否則這個指針變成野指針祭椰。
- 指針初始化
*
:定義時表示定義一個指針臭家,非定義時,指取指針保存的值&
:取某變量的地址
指針初始化
指針的指向內(nèi)容
指針存儲內(nèi)容為變量的地址方淤,即指針起指向作用钉赁,指向變量所存儲的內(nèi)容
指針指向圖
指針的運算
指針進(jìn)行加減運算后得到的仍然是指針,只不過指向的內(nèi)存地址相較于原來前進(jìn)或后退了n(對應(yīng)指針指向類型對應(yīng)大行)個操作數(shù)
result
- 此種運算并未改變p本身的地址你踩,只是改變了p所指向的地址
指針數(shù)組
指針數(shù)組是一個數(shù)組,數(shù)組中的每一個元素都是指針
int *data[10]={NULL};//初始化 for(int i=0;i<10;i++){ data[i]=(*int)malloc(sizeof(int)*10); } data[1][2]=1;
- data是指針數(shù)組的名字讳苦,也就是指向指針數(shù)組首元素的指針带膜。data[i]是該數(shù)組的第一個元素,也就是一個指向int的指針指針可以當(dāng)做數(shù)組來使用医吊。
數(shù)組指針
- 數(shù)組指針是指針钱慢,指向一個數(shù)組
int (*)data[10]=NULL;//指向一長度為10的int數(shù)組(int [10])的指針 //我們一般使用 int func(int data[][20]){ }
- 數(shù)組作為參數(shù)傳入函數(shù)時,對于被調(diào)用的函數(shù)參數(shù)就是指指針卿堂。因此束莫,這里參數(shù)是一個元素為int [20]的數(shù)組(數(shù)組的數(shù)組),所以草描,在函數(shù)內(nèi)部览绿,data實際上就是一個指向int [20]的指針(int(*)[20])
指針與函數(shù)
- 函數(shù)指針是指向函數(shù)的指針變量
- 通常說的指針變量是指向一個整型、字符型或數(shù)組等變量穗慕,而函數(shù)指針是指向函數(shù)
- 函數(shù)指針可以像一般函數(shù)那樣饿敲,用于調(diào)用函數(shù)、傳遞參數(shù)逛绵、函數(shù)指針聲明
typedef int (*fun_ptr)(int,int);
聲明函數(shù)指針變量p怀各,指向函數(shù)maxresult