首页 新闻 会员 周边 捐助

返回指针值的函数

0
[已解决问题] 解决于 2018-08-26 21:33
#include <stdio.h>
 int main()
{
  float score[][4]={ {60, 70, 80, 90},{56, 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");
 }
 }
 
    return 0;
 }
    float *search ( float ( * pointer)[4])
 {
    float *pt;
 int i= 0;
 pt= NULL;
 for(; i<4; i++)
 if( *( *pointer+i)<60) pt = *pointer;
    return(pt);
 }
 
这个程序有好多不懂  求详解   我是初学者  求多多关照  
白日做梦。的主页 白日做梦。 | 菜鸟二级 | 园豆:214
提问于:2018-08-15 22:51
< >
分享
最佳答案
1

float score[][4] 这是定义一个指针数组,每个元素都是一个指针,指针类型是一个int[4]的数组,叫做数组指针。score也可以理解为二维数组。

score 是一个指针,它指向数组指针数组的首地址,也就是*score = score[0]={60,70,80,90} 那么*(score+1)就是score[1]={...} ,score[0],score[1]也是一个指针,它们指向int[4]数组的地址。 所以**socre才是具体的值

float (* pointer)[4] 定义一个数组指针*pointer

search(score+i) 也就是是依次传入score[0] score[1] score[2] 

search 函数中 *( *pointer+i)<60  :

*pointer+i 表示的是指针pointer 向后移动i位,那么*(*pointer+i)表示的是指针pointer 向后移动i位的值。所以这个表达式是在遍历数组的值。比如传进来的参数是score+0它是指向socre[0]的指针,那么for循环遍历的值就是60,70,80,90 如果遇到小于60的元素就返回该指针。

 if( p==* (score+i) )    *(score+i)如前面所说是个指针,指向score[i] ,而p是search函数返回的指针,这是判断两个指针是否相同,是否指向同一个地址。

 

奖励园豆:5
Shendu.CC | 老鸟四级 |园豆:2138 | 2018-08-16 11:09

学习指指有什么好的方法啊?适合初学者吗?

白日做梦。 | 园豆:214 (菜鸟二级) | 2018-08-16 19:21

@小龙(>^ω^<)喵: 我也不晓得哎,我是自己实践,动手写写,这样自己理解深刻一点。

Shendu.CC | 园豆:2138 (老鸟四级) | 2018-08-16 22:43
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册