帮看一下这道题(c语言的)

来源:百度知道 编辑:UC知道 时间:2024/05/17 02:04:24
#include <stdio.h>
find(int *a,int n)
{ int *p,*s;
for(p=a,s=a;p-a<n;p++)
s=p;
return(*s);
}
void main()
{ int x[5]={12,11,13,6,18};
printf("%d\n",find(x,5));
}
就是想知道结果是怎样的出来的

第一次调用find函数时,p-a<n 是12-12<5,还是0-0<5

for(p=a,s=a;p-a<n;p++)
s=p;
解释一下这个循环语句吧
循环开始时给p和s赋初值a,就是传进函数的数组a的地址,然后判断p-a是否小于n(要查找的值在数组中的位数,此时是5),第一遍循环p-a=0,满足条件,把p的值给s,然后p++,在判断p-a是否小于n(n=5),p-a=1,满足条件,s=p(p=1,即s=1),p++,然后一直这样循环直到p-a=5,不满足条件退出循环。返回s的值,此时s的值为第五编循环所赋的值,即为数组的第五位元素。
其他的都很简单了,在次不做详解。

这个程序中find的功能是找到数组a[]中的第n个元素。
find(int *a,int n) 前面没有打函数返回类型int。
运行程序得18.

在函数中有个int*类型的p和a。p指向你当前所要比较的数所存的地址,a为数组a[]的首地址。
用p-a就会得到p所指的元素在a[]中所在的位置。当p-a=n时就循环结束,返回当前p所指向的数。所以运行find(x,5)之后,返回a[]中的第五个数18。

第一次调用find函数时,p-a<n 是12-12<5,还是0-0<5
答:是0-0<5 因为都是首地址 而不是首地址的值
最后返回return(*s); 是返回s所指地址的值 当p=s=5时退出循环
最好s返回的是a【4】的值

这个不是可以吗???是什么问题,讲清楚来,可以运行啊!!!也有结果!!!