Chinaunix首页 | 论坛 | 博客
  • 博客访问: 155339
  • 博文数量: 44
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 407
  • 用 户 组: 普通用户
  • 注册时间: 2015-11-10 13:28
个人简介

仰望星空

文章分类
文章存档

2016年(22)

2015年(22)

我的朋友

分类: C/C++

2015-11-30 22:28:32

一、概念
    二维数组是一维数组的延伸,一维数组中的a[0],a[1],a[2]...代表的是数据,而二维数组中的a[0],a[1],a[2]....则代表的是地址,a[0][1],a[1][2]...代表的才是数据。
二、举例分析与指针的关系
    (1)a[3][4],代表的是3行4列的数组,int *p = a;   printf("%d\n",(*(p+2*4+2)));   这样就可以输出对应于a[2][2]的元素。
    (2)printf("%d\n",*(a[2]+2));   同样也能输出a[2][2]的元素。
    (3)printf("%d\n",*(*(a+2)+2));   同样也能输出a[2][2]的元素。
    (4)
int (*p)[4] = a;   printf("%d\n",*(*(p+1)+2));   这个是比较难以理解的,要好好理解一下,注意数值指针 p 指向的一维数组元素是4
    其输出的相当于元素a[1][2]。

三、代码实例分析
    

点击(此处)折叠或打开

  1. /***Z
  2. ==================================================================
  3. 3个学生各4门成绩,计算所有学生成绩的平均分,并输出第n个学生的成绩
  4.                         采用指针的方式
  5. ==================================================================
  6. H***/

  7. #include <stdio.h>
  8. #include <string.h>

  9. int main()
  10. {

  11.     double sums(int (*f)[4], int j); // 求和函数声明
  12.     int i;
  13.     double avg[3], Sum;
  14.     int n;
  15.     int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};

  16.     //int *p = a;
  17.     //printf("%d\n",(*(p+2*4+2)));

  18.     int (*p)[4] = a;
  19.     printf("%d\n",*(*(p+1)+2));//注意p其实是一个指针,也就是一个地址,先向下移动一个,在向右移动三个
  20.     

  21.     printf("%d\n",a[2][2]);
  22.     printf("%d\n",*(a[2]+2));
  23.     printf("%d\n",*(*(a+2)+2)); //这三种方式的输出结果是相同的

  24.     

  25.     for(i = 0; i < 3; i++) //分别输出3个学生的平均成绩
  26.     {
  27.         Sum = sums(a, i);
  28.         avg[i] = Sum/4;
  29.         printf("avg[%d] = %4.02lf\n",i,avg[i]);
  30.     }

  31.     printf("请输入第n个学生:"); //以下代码是输出第几个学生的成绩
  32.     scanf("%d", &n);
  33.     if(n > 0 && n < 4)
  34.     {
  35.         printf("%d的成绩:%d,%d,%d,%d\n",n,*(*(a+n-1)),*(*(a+n-1)+1),*(*(a+n-1)+2),*(*(a+n-1)+3));
  36.     }
  37.     else printf("Input Error\n");

  38.     return 0;
  39. }

  40. double sums(int (*f)[4], int j) //求和函数
  41. {
  42.     double sum;
  43.     sum = *(*(f+j)+0) + *(*(f+j)+1) + *(*(f+j)+2) + *(*(f+j)+3);
  44.     return sum;
  45. }
其运行结果如下:
 其中前四行的7,11,11,11,11是对前面输出结果的验证。

阅读(1446) | 评论(0) | 转发(0) |
1

上一篇:写一下Poll机制

下一篇:常量是不能改变的

给主人留下些什么吧!~~