c语言例10.26

来源:百度知道 编辑:UC知道 时间:2024/06/18 15:43:41
#include <stdio.h>
int main()
{
float score[][4]={{60,70,80,90},{50,89,67,88},{34,78,90,66}};
float * search(float (* pointer)[4]);
float *p;
int i,j;
for(i=0;i <3;i++)
{
p=search(score+i);
if(p==*(score+i))
{
printf("No.%d score:",i);
for(j=0;j <4;j++)
{
printf("%5.2f",*(p+j));
}
printf("\n");
}/**/
}

}

float * search(float (* pointer)[4])
{
float *pt = *(pointer + 1);
int i;
for(i=0;i <4;i++)
{
if(*(*(pointer)+i) <60)
{
pt = *(pointer);
}
}
return (pt);
return 0;
} 谁能给解释一下函数调用部分的意思特别是float *pt = *(pointer + 1); 这行有什么用?我调试时删去此行也通。希望各位高手解释时,不要用谭浩强写得C程序设计此例后面的解释。

主要起初始化的作用,指向二维数组的第二行;
但是如果不赋初值为什么也可以呢?
因为,有for(i=0;i <4;i++)
{
if(*(*(pointer)+i) <60)
{
pt = *(pointer);
}
} 照样可以返回一个pt。
但是如果这个if(*(*(pointer)+i) <60)不成立,没有执行pt = *(pointer);时
那么返回的pt指针将为空,屏幕上将不显示如何结果。
你可以试一下将if(*(*(pointer)+i) <60)改为if(*(*(pointer)+i) <30)

如果事先初始化了pt的话,那么即使if(*(*(pointer)+i) <60)
{
pt = *(pointer);
}
没有执行,但程序仍有返回值,而且不为空。

数组行下标为1的这一行开始地址

不是很明显吗 当然没有用了,只需定义一下就行了,float *pt = *(pointer + 1); 改为float *pt,因为后面pt = *(pointer); 又给它赋值了,所以前面不用初始化