c語言指針集
『壹』 C語言中:數組指針與指針數組有什麼區別
數組指針是指向這個數組首地址的指針,指向對象是這個數組;
指針數組是存放一類指針的數組,這個數組的每個元素都是一個指針;
例子:
int a[10];
int* s;
s = a;//這里s就是一個數組指針,它的值就是數組a 的首地址;當然,如果a是一個整數,那s就是一個指向整型的指針;
int a;
int* s[5];
for(int i=0;i<5;i++)s[i]=a;
//這里s就是一個指針數組,它的每個元素都是整型變數a的地址
應該算比較明白了吧
謝樓上提醒
『貳』 C語言數組指針
int (*pstu)[4];為指向有4個元素的數組的指針
int* getPosPerson(int pos, int (*pstu)[4]);為返回值為指針的函數
注意這是指針函數,而不是函數指針,後者為指向函數的指針變數,兩者含義是不同的
(類似指針數組和數組指針,兩者含義也是不同的,一個本質是數組,一個本質是指針)
調用該函數的語句為:ppos =getPosPerson(pos,scores);
傳入的scores表示3行4列的二維數組首行數組的地址,即&scores[0]
調用後相當於int (*pstu)[4]=scores,所以在getPosPerson中pstu與scores是等價的
即pstu可看作&scores[0],那麼pstu+pos也就等價於scores+pos,等價於&scores[pos]
即返回了指向&scores[pos](也就是scores第pos+1行的地址)的指針
返回該行指針ppos後,就可以查看該行表示的學生的4科成績了
『叄』 C語言選擇題,關於指針數組。求詳解
int a[2][3]; 定義了一個二維函數,每一維數組有三個元素。
int (*pt)[3]; 定義了一個數組指針,也就是定義了一個指向有三個元素的指針,即該指針,每次自加1,地址跳過三個int
pt=a; 就是讓pt指向a[0],注意a[0]是一個數組地址,裡面有三個元素
對於A選項,pt[0][0]是正確的,pt[0][0]等價於a[0][0]
對於B選項,不正確,因為pt+1就是a[1], *(pt+1)[2]相當於a[3][0]不對。
因為運算符優先順序,[]大於*,因此*(pt+1)[2]就是*pt[1+2] 也就是*a[1+2]。而*a[3]就等價於a[3][0]。越界了
改成(*(pt+1))[2]就對了,相當於a[1][2]
對於C選項,正確,*(pt[1]+2) 相當於a[1][2]
對於D選項,正確,*(a[0]+2)相當於a[0][2]