指针变量初始化问题求助
C程序设计例8.26中找出不及格学生的学号和成绩#include <stdio.h>
int main()
{
float score[]={{55,60,65,80},{65,66,67,80},{52,51,50,80}};
float *serch(float (*p));
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)) float *serch(float (*p))
{ {
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的地址,这样做为什么不对,求指点
因为传递进去的不仅仅是一个float指针,这里面会有指针的隐式转换问题 BngThea 发表于 2018-4-11 14:35
因为传递进去的不仅仅是一个float指针,这里面会有指针的隐式转换问题
能具体点吗?为什么主函数中的指针变量就可以在for循环中初始化赋值,serch函数中的for循环里传递的也是地址啊,就不行了,求指点 zhangjian1 发表于 2018-4-11 14:41
能具体点吗?为什么主函数中的指针变量就可以在for循环中初始化赋值,serch函数中的for循环里传递的也是 ...
#include <stdio.h>
int main()
{
float score[] = {{55, 60, 65, 80}, {65, 66, 67, 80}, {52, 51, 50, 80}};
float *serch(float(*p));
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))
//{
// float *pt = NULL;
// int k;
// for(k = 0; k<4; k++)
// {
// if(*(*p + k)<60)
// pt = *p;
// }
// return pt;
//}
float *serch(float(*p))
{
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;
}
哇 老哥厉害了茅塞顿开啊 说明一下,指针赋值这块没有问题,函数serch的for循环逻辑有问题,循环完pt=NULL;主函数中没有对q=NULL的情况做处理,所以无输出
页:
[1]