1、數組的下標法:直觀且容易理解
如:
int a[5],i;
printf("Input five numbers:");
for(i=0;i<5;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<5;i++)
{
printf("%4d",a[i]);
}
2、數組名首地址法(指針法):指針增1運算的執行效率很高,利用指針的增1運算實現指針的移動,省去了每尋找一個數組元素都要進行的指針算術運算,執行效率最高。
說明:數組名有特殊含義,他代表存放數組元素的連續存儲空間的首地址,即指向數組中第一個元素的常量指針,如"a+i"代表數組中下標為i的元素a[i]的地址(&a[i]),而"*(a+i)"表示取出首地址元素后第i個元素的內容,即下標為i的元素"a[i]"。
int a[5],i;
printf("Input five numbers:");
for(i=0;i<5;i++)
{
scanf("%d",a+i);
}
for(i=0;i<5;i++)
{
printf("%4d",*(a+i));
}
3、移動指針變量法:
說明:指向同一數組中不同元素的指針的關系運算用於比較他們所指元素在數組中的前后位置關系。指針的算術運算(如增1和減1)用於移動指針的指向,使其指向數組中的其他元素。
注意:p++和p+1是本質不同的兩個操作。同:都對指針變量p進行加1運算 異:p+1不改變當前指針的指向,p仍指向原來指向的元素,p++講指針變量p向前移動一個元素的位置,指向下一元素,p++是加上1*sizeof(基類型)個字節。
int a[5],*p;
printf("Input five numbers:");
for(p=a;p<a+5;p++) 注意:p是指針變量,可以通過賦值操作改變他的值,使p指向數組中其他元素,而數組名a是一個常量指針,代表一個地址常
{ 量,其值是不能被改變的。
scanf("%d",p);
}
for(p=a;p<a+5;p++)
{
printf("%4d",*p);
}
4、指針下標法:
int a[5], *p=NULL, i;
printf("Input five numbers:");
p=a; // p=a等價於p=&a[0] //
for(i=0;i<5;i++)
{
scanf("%d", &p[i] ); // &p[i]等價於p+1 //
}
p=a; // 在再次循環開始前,確保指針p指向數組首地址 //
for(i=0;i<5;i++)
{
printf("%4d", p[i] ); // p[i]等價於*(p+i) //
}