指针与数组实例练习(指针运算)

数组元素的指针就是数组元素的地址。C语言中,数组名代表数组中首元素的地址,因此p=&a[0]等价于p=a,即把数组a的首元素的地址赋给指针变量p。

在指针指向数组时,可以对指针进行运算:

加一个整数:p+1;//指向同一数组的下一个元素

减一个整数:p-1;//指向同一个数组的上一个元素

自加运算:p++,++p;   自减运算:p--,--p;

两个指针相减:p1-p2;(当p1和p2指向同一数组元素时)//计算p1和p2所指元素的相对距离

例1:利用指针,输出数组中的全部元素。

 1 int main()
 2 {
 3     int a[10];
 4     int *p,i;
 5     printf("please enter 10 integer numbers:\n");
 6     for(i=0;i<10;i++)
 7     {
 8         scanf("%d",&a[i]);
 9     }
10     for(p=a;p<(a+10);p++)
11     {
12         printf("%d,",*p);
13     }
14     printf("\n");
15     return 0;
16 }
 1 int main()
 2 {
 3     int i,a[10],*p=a;
 4     printf("please enter 10  integer numbers:\n");
 5     for(i=0;i<10;i++)
 6        scanf("%d",p++);
 7     p=a;
 8     for(i=0;i<10;i++,p++)
 9        printf("%d, ",*p);
10     printf("\n");
11     return 0;
12 }

两种方式,体现指针使用的灵活多样,我个人感觉这也是指针之所以难理解的原因。

例2:将数组a中n个整数按相反顺序存放。

 1 int main()
 2 {
 3     void inv(int x[],int n);
 4     int i,a[10]={21,3,56,25,5,7,33,78,2,9};
 5     printf("The original array:\n");
 6     for(i=0;i<10;i++)
 7        printf("%d ",a[i]);
 8     printf("\n");
 9     inv(a,10);
10     printf("The array has been inverted:\n");
11     for(i=0;i<10;i++)
12        printf("%d ",a[i]);
13     printf("\n");
14     return 0;
15 }
16 void inv(int x[],int n)
17 {
18     int temp,i,j,m=(n-1)/2;
19     for(i=0;i<=m;i++)
20     {
21         j=n-1-i;
22         temp=x[i];
23         x[i]=x[j];
24         x[j]=temp;
25     }
26     return;
27 }

 

posted @ 2017-05-16 20:55  王醒燕  阅读(3730)  评论(0编辑  收藏  举报