#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); } 这个程序有好多不懂 求详解 我是初学者 求多多关照
1 回答
手掌心
TA贡献1942条经验 获得超3个赞
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函数返回的指针,这是判断两个指针是否相同,是否指向同一个地址。
添加回答
举报
0/150
提交
取消