#include<stdio.h>
void f(int *a,int n)//1.排序 2.折半查找法
{
//排序;
int k,y=0;
for(int b=0;*(a+b)!=NULL;b++)
y++;/*计算传入数组的长度; (在这里时发现最后一位数组元素的后一位地址(称AAA)中仍有一个值,会导致y最终解不为数组长度,所以有主函数中把AAA赋予null )*/
for(int b=0;b<y;b++)//排序 (此处往下的代码没有错误)
{
for(int c=0;c<y-b-1;c++)
{
if(*(a+b)<*(a+c+b))
{
k=*(a+c+b);
*(a+c+b)=*(a+b);
*(a+b)=k;
}
if(*(a+b)==*(a+c+b));
}
}
for(int b=0;b<y;b++)//打印数组
{
printf("%d ",*(a+b));
}
int max=0,min=y,goal,mid;
for(int b=0;b<y/2;b++)//折半查找法
{
mid=(min+max)/2;
if(n==*(a+mid))
{
while(n==*(a+mid))
{
goal=mid;
mid--;
}
break;
}
else if(n<*(a+mid))
{
max=mid-1;
}
else if(n>*(a+mid))
{
min=mid+1;
}
else if(b=y/2-1)
{
if(n!=*(a+0)||n!=*(a+y-1))
{
printf("wucishu!");
}
}
}
printf("第一次出现位置%d\n",goal+1);
}
int main()
{
int n,m;
scanf("%d",&n);
int a[n],*p=a;
*(p+n)=NULL;//此处是为了上面函数可以求得数组的长度(n)而做的铺垫,但怎样才能避免此处的操作 ??
for(int p=0;p<n;p++)
{
scanf("%d",&a[p]);
}
scanf("%d",&m);
f(a,m);
}
当指针指向数组时,如何判断指针指向数组最后一位的时候???
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- 辛潇 2021-01-07 22:30关注
1.*(p+n)=NULL;这行代码操作了不属于你的内存,是不能这么做的,不是能不能避免的问题。
2.main 函数里面已经知道数组的个数了,可以直接传给f函数
3.在f函数里面是获取不到数组的长度的
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 android报错 brut.common.BrutException: could not exec (exit code = 1)
- ¥15 nginx反向代理获取ip,java获取真实ip
- ¥15 eda:门禁系统设计
- ¥50 如何使用js去调用vscode-js-debugger的方法去调试网页
- ¥15 376.1电表主站通信协议下发指令全被否认问题
- ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
- ¥15 复杂网络,变滞后传递熵,FDA
- ¥20 csv格式数据集预处理及模型选择
- ¥15 部分网页页面无法显示!
- ¥15 怎样解决power bi 中设置管理聚合,详细信息表和详细信息列显示灰色,而不能选择相应的内容呢?