您的位置:首页 > 编程语言 > C语言/C++

C语言——指针与数组

2012-07-09 21:25 204 查看
在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]
中的元素 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
, 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 }






标签: 指针
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C语言