久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

C語言入門教程-用指針操作數(shù)組

 ldjsld 2016-07-31

C語言入門教程

在C語言中,,數(shù)組與指針的關(guān)系十分密切。要想有效地使用數(shù)組,,您需懂得如何借助指針,。而做到將二者的關(guān)系了如指掌,恐怕得花上數(shù)天的時間學(xué)習(xí)和試驗,,但這種努力決不會白費,。

讓我們從一個C數(shù)組的簡單例子開始:

#define MAX 10

int main()
{
int a[MAX];
int b[MAX];
int i;
for(i=0; i
a[i]=i;
b=a;
return 0;
}

錄入上面的代碼并編譯。您會發(fā)現(xiàn)代碼不能編譯,。如果要將a復(fù)制給b,,您需要像下面這樣寫:

for (i=0; i
b[i]=a[i];

或更簡練地寫為:
for (i=0; i

更好的方法是使用string.h中的memcpy函數(shù)。

從技術(shù)上說,,變量a和b本身并不是數(shù)組,,這是C語言中數(shù)組的不尋常之處。它們其實是指向數(shù)組的固定指針,。a和b永久指向各自數(shù)組的第一個元素——它們保存的分別是a[0]和b[0]的地址,。既然是固定指針,您就不能修改它們保存的地址,。因此不能用a=b;這樣的語句,。

因為a和b是指針,您可以用指針和數(shù)組做一些有意思的事情,。例如,,下面的代碼是正確的:

#define MAX 10

void main()
{int a[MAX];int i;int *p;

p=a;for(i=0; ia[i]=i;
printf("%d
n",*p);}

p=a;p=a;這條語句是合法的,因為a是一個指針,。嚴(yán)格地說,,a指向?qū)嶋H數(shù)組的第0號元素的地址,。此元素為一整數(shù),故a是一個指向單一整數(shù)的指針,。因此,,可以聲明p為一個指向整數(shù)的指針并令其等于a。用p=&a[0];替換p=a;是完全等價的,。因為a保存的是a[0]的地址,,所以a和&a[0]是相同的。

下圖顯示了剛好在for循環(huán)開始執(zhí)行之前的變量狀態(tài):

 

在for循環(huán)開始執(zhí)行之前的變量狀態(tài)
 

 

現(xiàn)在既然p指向了a的0號元素,,您可以進(jìn)行一些特別的操作,。變量a是一個不可修改的固定指針,而p卻不受這種限制,。其實C鼓勵您利用指針運算來移動p,。例如,如果您寫p++;,,而編譯器知道p指向一個整數(shù),,所以p就會被增加適當(dāng)?shù)淖止?jié),移動到指向數(shù)組的下一個元素,。如果p原來指向的數(shù)組元素是100個字節(jié)大小的結(jié)構(gòu)體,,p++;會將p移動100個字節(jié)。C會自動處理元素大小的細(xì)節(jié),。

您也可以使用指針將數(shù)組a復(fù)制給b,。下面的代碼可以用來代替
(for i=0;i

p=a;q=b;
for (i=0; i
{*q = *p;q++;p++;}

以上代碼可以簡化為:

p=a;
q=b;
for (i=0; i
*q++ = *p++;

并進(jìn)一步簡化為:

for (p=a,q=b,i=0; i *q++ = *p++, i++);

指針p或q在數(shù)組a或b中越界了怎么辦?C才不管——它會繼續(xù)漫不經(jīng)心地遞增p和q,,肆無忌憚地邊復(fù)制邊覆蓋掉別的變量,。C會將數(shù)組越界認(rèn)為是程序員有意為之,因此在訪問數(shù)組時需要謹(jǐn)慎,。

有兩種方式可將一個數(shù)組(如a或b)傳給函數(shù),。假設(shè)某dump函數(shù)接受一個整型數(shù)組為參數(shù)并將數(shù)組內(nèi)容在標(biāo)準(zhǔn)輸出上打印。這兩種編寫dump的方式為:

void dump(int a[],int nia)
{int i;for (i=0; i
printf("%d
n",a[i]);}

或:

void dump(int *p,int nia)
{int i;for (i=0; i
printf("%d
n",*p++);}

變量nia(number_in_array,,數(shù)組元素數(shù)目)用于確定數(shù)組的大小,。請注意傳入函數(shù)的只是一個指向數(shù)組的指針,而不是數(shù)組的內(nèi)容,。另外請注意,,C函數(shù)能接受可變大小的數(shù)組作為參數(shù)。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多