在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 }
标签:
指针
转载于:https://blog.51cto.com/699794/925325