c語言數組的指針
① c語言指針指向數組的問題。
首先你要明白一點,數組名和指針本質上是一回事,都是地址,該數組的首地址。知道這一點後就可以活學活用了。這是c語言的精髓。
比如你定義了int
*p,a[10];並且讓p=a;,
這個操作叫做指針p指向了數組a,其本質是給p這個變數付了一個值,就是數組a的地址,也是a[0]的地址,也是a本身裡面存儲的內容。
那麼要引用a[i],你可以有很多種寫法,比如*(a+i),
*(p+i),
p[i],都是等效的。
p++的含義其實不是p=p+1,至少有時不是,p++的操作其實是讓p指向下一個元素,也就是原來p指向的是a[0],那麼現在p指向a[1]了。由於a是int類型,站4個位元組,那麼p++這個操作其實是讓p的內容增加了4。不要問為什麼,c語言就是這么規定的。如果p指向的是一個char類型,那麼p++就使p的值增加1。
② 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語言指針,指向數組的指針、指向指針數組的指針、指向數組的指針的指針,分別如何定義
解答:
1. 如何聲明一個指針,這個指針是指向整個數組的,數組有n個元素,每個元素是int,不是int (*p)[n],而是最簡單的int*p;
2. 如何聲明一個指針,這個指針也是指向數組的,數組有n個元素,每個元素不是int,而是指針int*;這個指針是int**p;
3. 又如何聲明一個指針,它指向另一個指針,這「另一個指針」指向一個數組,數組元素是int;這個指針仍然是int**p。
④ C語言中指針和數組是怎樣相互轉換的
指針數組,就是一個數組里存放的都是指針,比如*p[8];p[0]里存放的就是一個指針數據
數組指針,數組名就是一個指向數組起始地址的指針,數組下標是縈引,比如num[0],他就相當於num+0;
num這個指針沒移動,於是取的是數組的第一個。num[1]相當於數組指針移1,於是指向數組第二個
⑤ C語言中 數組指針的意義
你說的是指向數組的指針如int(*)[]?
指向數組的指針有一種非常常見的用法,就是令其指向二維數組的某一行。如二維數組a[3][4],它的本質是一維數組的數組,即a本質上是一個3個元素的數組,其中的每個元素都是一個int[4]數組。要想使用一個指針p指向其中的某個元素,就必須將p定義為數組指針int (*p)[4],它指向一個int[4]數組。然後,才可以令p指向a:p=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科成績了