全站搜索未启用
跳到主要内容

文本六:使用指针和动态存储分配的程序举例

例1:以指针方式访问数组元素的程序
  void main() {
    int a[5]={3,6,9,12,15};
    int i, *p=a;
    for(i=0; i<5; i++) printf("%5d",*p++);
    printf("\n"); //换行
    for(p=a+4; p>=a; p--) printf("%5d",*p); 
    printf("\n"); //换行
  }
    3  6  9  12  15
    15  12  9  6  3


  例2:进行简单变量动态存储分配
  void main() {
    int x=23,y=40,z;
    int *p1=malloc(sizeof(int));
    int *p2=malloc(sizeof(int));
    *p1=x; *p2=y;         //*p1:23, *p2:40
    printf("%d %d\n",*p1,*p2);  //23 40
    z=*p1;*p1=*p2;*p2=z;     //交换*p1与*p2的值
    printf("%d %d\n",*p1,*p2);  //40 23
    free(p1); free(p2);
  }


  例3:动态存储分配任意大小的一维数组的程序
  void main() {
    int n,i,*a;
    printf("给n输入一整数(1-10): ");
    scanf("%d",&n);
    a=calloc(n,sizeof(int));
    a[0]=1;
    for(i=1; i<n; i++) a[i]=3*a[i-1];
    for(i=0; i<n; i++) printf("%5d",a[i]);
    printf("\n"); free(a);
  }  //输8:1 3 9 27 81 243 729 2187


  例4:动态存储分配二维数组的程序
  int** InputData(int row, int col){
    int i,j;
    int** ab;
    ab=calloc(row, sizeof(int*));
    for(i=0; i<row; i++) ab[i]=calloc(col,sizeof(int));
    printf("%d行*%d列: \n",row,col);
    for(i=0; i<row; i++)
      for(j=0; j<col; j++) scanf("%d",&ab[i][j]);
    return ab;
  }
  void main() {
    int i,j;
    int row=3,col=4;
    int** ab=InputData(row,col);
    printf("输出二维表格数据: \n");
    for(i=0; i<row; i++) {
      for(j=0; j<col; j++) printf("%5d",ab[i][j]);
    printf("\n");
    }
    for(i=0; i<row; i++) free(ab[i]); 
    free(ab);
  }

最后修改: 2019年09月26日 Thursday 19:01