Chinaunix首页 | 论坛 | 博客
  • 博客访问: 852656
  • 博文数量: 321
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 936
  • 用 户 组: 普通用户
  • 注册时间: 2013-02-23 11:25
文章分类

全部博文(321)

文章存档

2017年(1)

2016年(10)

2015年(61)

2014年(187)

2013年(62)

分类: C/C++

2014-06-24 10:45:43


/*****
关于数组指针的理解:
void average(float *point, int n);
void search(float (*point)[4], int n);
上面是函数申明。
average(*score, 16);
search(score, num);
这里是函数调用。
同是 指针,为什么两个实参不一样。
这里是二维数组指针,分为3级.
对于该数组我们可以理解为:score的一维数组(第一层),它有四个元素score[0]、score[1]、score[2]、score[3](第二层),
而每个元素又含有4个元素score[0][0],score[0][1],score[0][2],score[0][3](第三层)…
到此我们终于访问到了每个元素了,这个过程我们经历了:score->score[0]->score[0][0];

这里void average(float *point, int n);*point定位于第三层了。
我们实参传递时,就要是他上一层,也就是第二层*score.

这里void search(float (*point)[4], int n); (*point)[4]定位于第二层。
我们实参传递时,就要是他上一层,也就是第一层score.
*******/

#include <stdio.h>
#include <stdlib.h>

void average(float *point, int n);
void search(float (*point)[4], int n);

int main(int argc, char *argv[])
{
    int num;

    static float score[4][4] = {{76, 90, 92, 87},{68, 78, 69, 94},{89, 82, 81, 60},{81, 68, 60, 97}};
    printf("班级的总平均分:");
    average(*score, 16);

    printf("请输入学生的学号(0-3):");
    scanf("%d", &num);
    search(score, num);

    system("pause");
    return 0;
}

void average(float *point, int n)
{
    float *p_end;
    float aver;
    float sum = 0;
    p_end = point + n - 1;
    for(; point <= p_end; point++)
        sum = sum+(*point);
    aver = sum/n;
    printf("%5.2f\n",aver);
}

void search(float (*point)[4], int n)
{
    int i;
    for(i = 0; i < 4; i++)
        printf("%5.2f,",*(*(point+n)+i));
    printf("\n");
}


阅读(467) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~