#include<stdio.h>
#define pr printf
void main()
{int a[3][4]={{65,57,70,60},{80,47,90,81},{90,99,100,98}};
int bjg(int *p,int n);
bjg(a);
}
int bjg(int *p)
{int j,i;
for(j=0;j<3;j++)
for(i=0;i<4;i++)
{if((*(*(p+j)+i))<60)
{for(i=0;i<4;i++)
pr("NO%dfail,his score:\n%d ",j+1,*(*(p+j)+i));
}}
}
这是我写的程序,但是编译不能过,请问问题出在哪?有一门或以上的学生,他的四门都要输出。
高手,我还有问题:
一.为什么要强制转换,我刚试了一下,不强制转换也能行啊。
二.为什么加return 0;不用加也能正常运行。
三.刚我把int bjg(int *p);改成int bjg(int (*p)[4])也能正常运行了,那是说(*P)[4]这个指针,如果P+1,他就能跳到下一行的首位置,跨度为4。而如果是*P,P+1他只能跳到a[0][1]跨度为1,我理解对吗?
前面两点,编译器不同对代码要求不同,有的编译器不加也可以。把int bjg(int *p);改成int bjg(int (*p)[4])当然也是一种方法,因为a[3][4]是二维数组,你要当一维数组用,就要用我的改法,要当二维数组用就用你的这种int bjg(int (*p)[4])