返回指针值的函数

#include <stdio.h>
#include <string.h>
#define LINE 4   /*行*/
#define COL 4   /*列*/
main()
{
 float *search(float (*)[COL]);/*(float (*)[COL])中未声明具体的指针变量名,这样便于search函数定义时可以随意使用变量名*/
 float score[LINE][COL]={{75,69,87,89},{99,61,50,71},{88,42,93,78},{95,96,35,74}};
 float *p;
 int i,j,k=0;
 /*以下是输出原数组*/
 printf("Source Array:/n");
 for(p=*score,i=0;p<*score+LINE*COL;p++,i++)
  {if(i!=0&&i%COL==0) printf("/n");/*如果不加i!=0条件,输出的结果将不是每4个元素值一行*/
   printf("%-7.2f",*p);
  }
 putchar('/n');
 for(i=0;i<LINE;i++)
  {p=search(&score[i]);/*调用返回指针值的函数search,(score+i)表示数组中第i行首元素的地址(指针),(score+i)可以写成&score[i],如果写成其它同等(正确)形式,VC++系统进行编译时会发出警告,但不会影响运行结果*/
   if(p==*(score+i))/*如果search函数返回的地址(指针)是数组中第i行第0列元素的地址(指针,与数组中的第i行第0列相等)就执行后面的语句*/
   {if(k++==0) printf("Failed students:/n");/*使字符串“Failed students”只被打印一次*/
    printf("NO.%d scores:",i);
    for(j=0;j<COL;j++)
   printf("%-7.2f",*(p+j));
    printf("/n");
   }
  }
}

float *search(float (*p)[COL])
{
 float *pointer;
 int i;
 pointer=*(p+1);
 for(i=0;i<COL;i++)
 if(*(*p+i)<60) pointer=*p;/*如果*(*p+i)的值小于60,则重新对指针变量pointer进行赋值,否则维护原有值不变,仍为pointer=*(p+1),即下一行的首元素地址*/
 return(pointer);
}

/*注意区分*(p+i)与*p+i的使用方法和运算结果的异同*/ 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值