2019-05-08 不知道说什么好

今天拿我可爱的裸亮写的代码鉴赏一下八~:

#include <stdio.h>
#include <stdlib.h>
int* ave(int*);
void find(int*);
int main(void) {
    int a[3][4]= {{80,90,100,66},{60,50,40,59},{46,99,60,59}};
    int *p,*x;
    p=ave((int*)a);                                         //把表打成了排——lph注
    printf("平均分分别为:%d %d %d\n",*p,*(p+1),*(p+2));
    printf("不及格的:\n");
    find((int*)a);
    return 0;
    }
int *ave(int *p) {
    int *a;
    a=(int *)malloc(3*sizeof(int));
    for (int i=0; i<3; i++) {
        a[i]=(*(p+i*4)+*(p+i*4+1)+*(p+i*4+2)+*(p+i*4+3))/4;
        }
    return a;
    }
void find(int *p) {
    int stu=0,num=0;
    for (int i=0; i<3; i++) {
        for (int j=0; j<4; j++)
            if(*(p+i*4+j)<60)
                num++;
        if(num)
            printf("Stu:%d,SubNum:%d\n",i+1,num);
        num=0;
        }
    }

亮点鉴赏

  • 在函数ave中,如果没有a=(int )malloc(3sizeof(int));这句话而直接返回一个a,那么程序就会出现bug并提示编译警告,这是因为如果没有这句话,那么子函数会在运行结束后自行回收内存,那么就会出现不可预料的bug,而如果有malloc申请内存后,内存将一直保留,直到用free清除后。malloc函数包含在stdlib.h里面。
    • 之所以会需要a[i]=((p+i4)+(p+i4+1)+(p+i4+2)+(p+i4+3))/4;,这是数组的一种表达形式,因为他在主函数里这句话p=ave((int*)a);已经把数组转化为一维的了,就需要这样靠加4来往前推进。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容