標籤:c 指標
第一、 指標和常數
常數是不能直接幅值給指標的,如果想給指標幅常數,需要如下操作:
int cal=8;
int *pcal=&cal;
pcal指向8儲存的地址,*pcal為該地址儲存的資料8。
第二、 指標和數組
指標和數組有著天然的聯絡,其實數組就是一個連續地址存放著常數,我們看下面一個例子:
int arry[3]={1,3,5};
那麼arry就是該數組的首地址,*arry就是該數組首地址存放的資料1,*(arry+1)則為該數組的第二個位置存放的資料3
從以上可以看出:
*arry和arry[1]同樣指向該數組的首個元素。
進一步延伸,如下:
a 、int *data[3] 為指標數組,數組中每個元素為一個指向int型資料的指標,賦值如下:
int arry[3]={1,3,5};
int *data[3]={arry,arry+1,arry+2};
data[0]為指向arry首地址,*data[0]為該地址存放的資料1。data為data數組的首地址,*data和data[0]都為數組arry的首地址。其實也可以說定義了三個數組 data[0], data[1]和data[2]。
b、int(*data)[3]為一數組指標,為一數組,每個元素為存放一個地址,賦值如下:
int arry[3]={1,3,5};
int (*data)[3]=&arry;
那麼*data就為第一個元素的地址,**data就為第一個地址所在的元素1。
第三、 指標與結構體
struct PERSON
{
char *pername;
int age;
}person;
如果想給*pername幅值,那麼可以如下操作:
person.pername="jack";//用指標,可以完成賦值
如果結構體定義為
struct PERSON
{
char pername[20];
int age;
}person;
person.pername[20]="jack"是不能通過的,其原因就是結構體為抽象資料類型,不分配儲存單元,所以數組賦值不通過。如果採用指標賦值,那麼可以解決這類問題。
第四、 指標與函數
指向函數的指標在linux作業系統中很常見
int print(int a, int b ,char *p)
{ printf("in put number sum is %d,input string is %s\n",a+b,p);//三個參數,int int和char*
return a+b;}
int main()
{
int (* pprint)(int,int,char *);//定義指向函數print的指標函數*pprint,三個參數,int int和char*
pprint=print;//給指標函數賦值
int c;
c=pprint(3,6,var);
printf("%d\n",c);//輸出print的return值
}
一個函數其實就是從一個地址開始的特殊功能程式,其函數名就為該程式的首地址,所以可以這麼給指標函數賦值:pprint=print;//給指標函數賦值
本文出自 “大李子” 部落格,謝絕轉載!
C語言指標