C语言练习3—数组法和指针法输出二维数组

2019/4/12

题目:有一个3*4的二维数组,要求数组法和指向元素的指针变量输出二维数组中元素的值
输出结果为:
     在这里插入图片描述
数组法:

#include 
int main(void){
  /*i为行,j为列*/
  int i, j;
  /*定义一个3*4的二维数组 */
  int a[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
  for(i = 0; i < 3; i++){
    for(j = 0; j < 4; j++){
      printf("%3d ",a[i][j]);
    }
        printf("\n");
    }
    getchar();
    return 0;
}

指针法(一):

#include 
#include 
    int main(){
    int m,n;
    /*定义一个3*4的二维数组*/
    int a[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
    for(m = 0; m < 3; m++){
        for(n = 0; n < 4;n++){
            printf("%2d ",*(*(a+m)+n));
        }
        printf("\n");
    }
    system("pause");
    return 0;
}

注:a[m][n] == *(*(a+m)+n)

指针法(二):

#include 
#include 
int main(){
    /*定义一个3*4的二维数组*/
    int a[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
    int *p, m = 0;
    for(p = a[0]; p < a[0] + 12; p++){
        m++;
        printf("%2d ", *p);
        if(m % 4 == 0)
            printf("\n");
    }
    system("pause");
    return 0;
}

注:a[0]是元素1的地址,所以*a[0] == 1  
  a[0] + 1是元素2的地址,所以*(a[0] + 1) == 2
  ...
  a[0] + 11是元素12的地址,所以*(a[0] + 11) == 12
  同时,从另一个角度看:
  a[0]是元素1的地址,所以a[0]+1是元素2的地址
  a[1]是元素5的地址,所以a[1]+1是元素6的地址
  a[2]是元素9的地址,所以a[2]+1是元素10的地址
  … 以此类推

你可能感兴趣的:(C语言编程练习)