for循环中如果判断条件为函数的返回值,就会出错,请教下大神该怎么解决?

//物品打折,全部8.5折,且单品满500的有礼品相送。
//现在要统计打折后的价格,并保存打完折后单品价格仍然大于500的单品的价格。
#include"stdio.h"
#define N 6
 int  discount(float *p,float *g)
 {
 	int i,j=0;
 	for(i=0;i<N;i++)
 	{
 		*(p+i)*=0.85;
 		printf("%.1f ",*(p+i));
 	    if(*(p+i)>500)
 	    {
 	    	g[j++]=*(p+i);
		}
	}
	return j;
 }
 int main()
 {
 	int i,j;
	float g[6];
 	float a[N]={238.0,958.0,1050.0,599.0,799.0,198.0};
 	printf("打折前的价格分别是:");
 	 for(i=0;i<N;i++)
 	 {
 		printf("%.1f   ",*(a+i));
	 }
	 printf("\n打折后输出的结果是:");
	 j=discount(a,g);
	 printf("判断一下g的长度%d",j);
     putchar('\n');
	 for(i=0;i<N;i++)
	 {
	 	printf("%.1f   ",*(a+i));//再输出一次
	 }
	 printf("\n打折后仍然超过500的:");
	 for(i=0;i<discount(a,g);i++)//这个地方如果把discount(a,g)改为j,结果就不会出错,但数值上不是一样的吗?
	 {                                              //请问一下这是为什么呢?
	 	printf("%.1f   ",*(g+i));
	 }
	 putchar('\n');
	 return 0;
 }


慕粉1600176492
浏览 1675回答 1
1回答

朕日理万机

因为你在调用函数的同时,也同时改变了数组a和g的值。每调用一次,会做这么几件事:1.会把a中的每个元素乘以0.85,2.把g中的前若干个元素改为a对应的元素,3.返回你当前a中有多少个超过多少个超过500的。所以你连续多次调用以后,a的值会不断变小,返回值也会变小,g里的元素不再有什么意义。函数,甚至基本表达式,不光是返回给你一个值,你也要考虑它在执行过程会产生什么后果。
打开App,查看更多内容
随时随地看视频慕课网APP