今天拿我可爱的裸亮写的代码鉴赏一下八~:
#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来往前推进。
网友评论