|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
C程序设计例8.26中找出不及格学生的学号和成绩
#include <stdio.h>
int main()
{
float score[][4]={{55,60,65,80},{65,66,67,80},{52,51,50,80}};
float *serch(float (*p)[4]);
int i,j;
float *q;
for(i=0;i<3;i++)
{
q=serch(score+i);
if(q!=NULL)
{
printf("NO.%d score is:",i);
for(j=0;j<4;j++)
{
printf("%5.2f ",*(q+j));
}
}
}
return 0;
}
float *serch(float (*p)[4]) float *serch(float (*p)[4])
{ {
float *pt=NULL; float *pt;
int k; int K;
for(k=0;k<4;k++) serch函数改为如右所示 for(k=0;k<4;k++)
{ {
if(*(*p+k)<60) if(*(*p+k)<60)
pt=*p; pt=*p;
} else pt=NULL;
return pt; }
} return pt;
}
在VC++6.0下编译都能通过,但是serch函数如右所示时,程序卡死在pt=*p处,书上说需要先对*pt指针初始化,但是这两种情况有什么区别吗?右边函数中不过是在for循环中对指针初始化,赋值的也是score[0][0]的地址,这样做为什么不对,求指点
- #include <stdio.h>
- int main()
- {
- float score[][4] = {{55, 60, 65, 80}, {65, 66, 67, 80}, {52, 51, 50, 80}};
- float *serch(float(*p)[4]);
- int i, j;
- float *q;
- for(i = 0; i<3; i++)
- {
- q = serch(score + i);
- if(q != NULL)
- {
- printf("NO.%d score is:", i);
- for(j = 0; j<4; j++)
- {
- printf("%5.2f ", *(q + j));
- }
- }
- }
- return 0;
- }
- //float *serch(float(*p)[4])
- //{
- // float *pt = NULL;
- // int k;
- // for(k = 0; k<4; k++)
- // {
- // if(*(*p + k)<60)
- // pt = *p;
- // }
- // return pt;
- //}
- float *serch(float(*p)[4])
- {
- float *pt;
- int k;
- //for(k = 0; k<4; k++)
- //{
- // if(*(*p + k)<60)
- // pt = *p;
- // else pt = NULL;
- //}
- for(k = 0; k<4; k++)
- {
- if(*(*p + k) < 60)
- {
- pt = *p;
- break;
- }
- else pt = NULL;
- }
- return pt;
- }
复制代码
|
|