weixin_49565142 2021-01-07 21:34 采纳率: 50%
浏览 473
已采纳

当指针指向数组时,如何判断指针指向数组最后一位的时候???

#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);
 } 
  • 写回答

1条回答 默认 最新

  • 辛潇 2021-01-07 22:30
    关注

    1.*(p+n)=NULL;这行代码操作了不属于你的内存,是不能这么做的,不是能不能避免的问题。

    2.main 函数里面已经知道数组的个数了,可以直接传给f函数

    3.在f函数里面是获取不到数组的长度的

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog