C语言——指针与数组

在C语言中 ,无论是一维数组还是二维数组 ,数组名实际是指针常量(是一个符号常量) ,称为数组指针  

一 :一维数组和指针 :

//数组名a是数组的起始地址 ,C语言规定 : 
a = &a[0] , a + 1 = &a[1] , ... , a + i = &a[i] , ...
//由指针运算*和&的关系可知 :
* a = a[0] , *(a + 1) = a[1] , ... , *(a + i) = a[i] , ...

例一:任意输入5个整数 ,按由小到大次序输出,并输出其中最大最小数各自出现的次数

 1 #include <stdio.h>
2
3 int main()
4 {
5 int max = 0 , min = 0 , temp , i , j , num[5] , *p ;
6
7 for(i = 0 ; i < 5 ; i++) //依次输入5个整数到数组内
8 scanf("%d", num+i);
9
10 for(i = 0 ; i < 5 ; i++) // 比较大小 ,按从小到大顺序排列
11 {
12 for(j = i+1 ; j < 5 ; j++)
13 {
14 if(*(num+i)>*(num+j))
15 {
16 temp = *(num+i);
17 *(num+i) = *(num+j);
18 *(num+j) = temp ;
19 }
20 }
21 }
22
23 for(j = 0 ; j < 5 ; j++) //计算max , min 的次数
24 {
25 if(*(num+j) == *(num+0))
26 min += 1 ;
27 if(*(num+j) == *(num+4))
28 max += 1 ;
29 }
30
31 printf("\n max times = %d , min times = %d \n" , max , min);
32
33 //for(p = num ; p <= num + 4 ; p++)
34 for(i = 0 ; i < 5 ; i++) // 两种输出方式都可以
35 {
36 //printf("%5d" , *p);
37 printf("%4d", *(num +i));
38 }
39 printf("\n");
40
41 return 0 ;
42 }

二 :指针与多维数组 :

二维数组 a[m][n] 中的元素 a[i][j] 的表示方法 有以下 7 种 (int *p = a ;):

1 a[i][j]
2 *(a[i] + j)
3 *(*(a + i) + j)
4 (*(a + i))[j]
5 *(&a[0][0] + n * i + j)
6 *(a[0] + n * i + j)
7 *(p + n * i + j)

例二 :由键盘输入 8 个整数 ,存入一维数组 a 中 ,再组成一个两行四列的二维数组 b[2][4] ,要求b[i][j]的值为a[0] , a[1] , ... , a[0] + i *4 + j 之和

 1 #include <stdio.h>
2 #define N 8
3
4 int main()
5 {
6 int a[N] , b[2][4] , sum = 0 , i , j , *pa = a , *pb = b ;
7
8 for(i = 0 ; i < N ; i++)
9 {
10 scanf("%d" , pa + i);
11 }
12
13 for(i = 0 ; i < 2 ; i++) //计算生成b[2][4]
14 {
15 for(j = 0 ; j < 4 ; j++)
16 {
17 sum += *(pa + i * 4 +j) ;
18 *(pb + i * 4 + j) = sum ;
19 }
20 }
21
22 printf("\n Aarray : ");
23 //for(pa = a ; pa < a + N ; pa++) //两种输出方式都可以
24 for(i = 0 ; i < N ; i++)
25 {
26 //printf("%d" , *pa);
27 printf("%4d" , *(pa+i));
28 }
29
30 printf("\n Barray :");
31 for(i = 0 ; i < 2 ; i++) //输出数组 b[2][4]
32 {
33 printf("\n");
34 for(j = 0 ; j < 4 ; j++)
35 {
36 //printf("%4d" ,*(pb + i * 4 + j)); //两种输出方式都可以
37 printf("%4d" , *(*(b + i) + j));
38 }
39 }
40 printf("\n");
41
42 return 0 ;
43 }

posted @ 2011-08-12 13:51  MATRIX | yan  阅读(822)  评论(6编辑  收藏  举报