|
10鱼币
如题:这样编写就能打印正确?请主要看红色部分:(小甲鱼的C语言的48课的课后题)方法一:
#include<stdio.h>
void main()
{
double score[][4]={60.0,70.0,80.5,90.5,56.0,89.0,67.0,88.0,34.2,78.5,90.5,100};
double *search(double (*pointer)[4]);
int *p;
printf("不合格的学生是:");
p=search(score);
printf("%d %d",*p,*(p+1));这种方法能正确打印。而下面我分开打印时*(p+1)的值就不对了!为什么呢?
printf("\n");
}
double *search(double (*pointer)[4])
{
int i,j;
int k[3],m=0;
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
if(*(*(pointer+i)+j)<60.0)
{
k[m]=i;
m++;//printf("%d ",i);
}
}
}
return k;
}
方法二(非正确方法):
#include<stdio.h>
void main()
{
double score[][4]={60.0,70.0,80.5,90.5,56.0,89.0,67.0,88.0,34.2,78.5,90.5,100};
double *search(double (*pointer)[4]);
int *p;
printf("不合格的学生是:");
p=search(score);
printf("%d %d",*p);//这个值和上面一样。
printf("%d",*(p+1));//这个值就不对了,不知道为什么?求高手解答一下!
printf("\n");
}
double *search(double (*pointer)[4])
{
int i,j;
int k[3],m=0;
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
if(*(*(pointer+i)+j)<60.0)
{
k[m]=i;
m++;//printf("%d ",i);
}
}
}
return k;
}
|
最佳答案
查看完整内容
首先你的程序写的有几处问题:
1:search函数double类型返回int型指针
2:search函数执行完毕,栈变量的内存引用会被释放,就是你main中获取到search的返回值,那也是不对的,释放的栈数据随时被系统征用
3:想得到函数返回而不会被释放,你可以返回score这个二维数组的地址
你先修改下代码,search可以再传递一个指针进去,获取不及格的成绩地址,返回值可以去掉,就没问题了!
|