js梦已深 2022-09-05 22:54 采纳率: 33.3%
浏览 61
已结题

第一次写c语言,不知道问题在哪

问题遇到的现象和发生背景

[Error] request for member 'size' in 'arr', which is of non-class type 'int*'
提示第三行,16

问题相关代码

int main(int *arr,int target){
int left=0;
int right=arr.size() - 1;
while(left <= right){
int target==arr.size() - 1;
int mid==left + (left - right)/2
if(target==arr.[mid]){
return mid;
}
else if(target > arr.[mid]){
right=mid + 1;
}
else if(target < arr.[mid]){
left=mid - 1;
}
}
return -1;
}

想知道怎么解决

  • 写回答

3条回答 默认 最新

  • 假正经的小柴 Java领域优质创作者 2022-09-06 00:23
    关注

    有几处问题:
    1.首先一个程序里只能有一个主函数,看你这个代码应该是想写一个二分查找的算法并返回查找到的那个元素的下标。你可以把函数名改掉然后在主函数里调用。(当然如果你是在c++中的类中,那这种写法是没有问题的)

    2.size()这个函数是对c++中的STL容器用的,在这里用会报错的。一般求数组是用sizeof,(格式:sizeof(数组名)/sizeof(数组元素的数据类型),而且这里数组名还是不能以形参的形式出现,因为数组作为形参传递相当于传递给指针,而sizeof(指针名)是计算指针的字节大小(8个字节 64位系统),反正不管怎样你这样写都是不对的。

    建议:这边建议你用vector对象进行传递,那样的话可以用size()指示数组长度,你也可以在输入数组的地方用sizeof先计算好,然后再把计算好的长度以参数形式传递过来就OK了。

    3.你right和left都给搞反了,应该是right - left,还有下面应该是left = mid + 1,right = mid - 1,还有就是可以直接写成int mid = (right + left)/2就行了看着简单点直观点,而且那个/2可以换成位运算>>1,运行更快

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 9月14日
  • 已采纳回答 9月6日
  • 创建了问题 9月5日

悬赏问题

  • ¥15 高价求中通快递查询接口
  • ¥15 解决一个加好友限制问题 或者有好的方案
  • ¥15 关于#java#的问题,请各位专家解答!
  • ¥15 急matlab编程仿真二阶震荡系统
  • ¥20 TEC-9的数据通路实验
  • ¥15 ue5 .3之前好好的现在只要是激活关卡就会崩溃
  • ¥50 MATLAB实现圆柱体容器内球形颗粒堆积
  • ¥15 python如何将动态的多个子列表,拼接后进行集合的交集
  • ¥20 vitis-ai量化基于pytorch框架下的yolov5模型
  • ¥15 如何实现H5在QQ平台上的二次分享卡片效果?