#include<stdio.h> int main(void) { void inv(int p[],int x); int a[10]={3,7,9,11,5,21,2,1,8,4}; printf("The original array:\n"); int i; for(i=0;i<10;i++) { printf("%d\t",a[i]); } printf("\n"); inv(a,10); printf("The array has been inverted:\n"); for(i=0;i<10;i++) { printf("%d\t",a[i]); } return0; }
void inv(int p[],int x) { int y; int z=(x-1)/2; int n; int temp; for(y=0;y<=z;y++) { n=x-1-y; temp=p[y]; p[y]=p[n]; p[n]=temp; } }
运行结果:
The original array: 379115212184 The array has been inverted: 481221511973
指向二维数组元素的指针变量
在内存中,二维数组的分布是一维线性的
例题:
有一个3×4的二维数组,要求用指向元素的指针变量输出二维数组各元素的值。
程序:
#include<stdio.h> int main(void) { int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23}; int *p; for(p=a[0];p<a[0]+12;p++) { if((p-a[0])%4==0) { printf("\n"); } printf("%d\t",*p); } return0; }
运行结果
1 357 9 111315 17 192123
指向由多个元素组成的一维数组的指针变量
例题:
输出二维数组任一行任一列元素的值。
程序:
#include<stdio.h> int main(void) { int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23}; int (*p)[4],i,j; //指针变量p指向包含4个整型元素的一维数组 printf("输入行和列:"); scanf("%d%d",&i,&j); p=a; printf("a[%d,%d]=%d",i,j,*(*(p+i)+j)); return0; }
#include<stdio.h> int main(void) { int *search(int (*pointer)[4],int n); int source[3][4]={{89,78,80,76},{67,90,56,70},{91,80,90,75}}; printf("输入学生序号:"); int num; scanf("%d",&num); int *p; p=search(source,num); int i; for(i=0;i<4;i++) { printf("%d\t",*(p+i)); } return0; }
int *search(int (*pointer)[4],int n) { int *pt; pt=*(pointer+n); return pt; }
#include<stdio.h> int main(void) { int a[5]={1,3,5,7,9}; int *b[5]={&a[0],&a[1],&a[2],&a[3],&a[4]}; int **p; p=b; int i; for(i=0;i<5;i++) { printf("%d\t",**p); p++; } return0; }