C语言强制类型转换报错expected expression before 'int' 解决方法
问题描述
编写二分查找功能的C语言代码时,尝试将(beg+end)/2的计算结果强制转换为int类型赋值给mid变量,编译时出现类型转换失败报错。
相关实现代码:
int arr5[8]={10,20,30,40,50,60,70,80}; len=8; int beg=0,mid,end=len-1,loc; mid=int((beg+end)/2); printf("%d",mid);
编译抛出的具体错误信息:
error: expected expression before 'int' mid=int((beg+end)/2); ^~~
报错原因
- 你使用的
int(表达式)是C++支持的函数式强制类型转换写法,C语言标准不兼容这种语法。C语言的强制类型转换规则要求:目标类型名必须包裹在圆括号内,放在待转换表达式的前方,编译器遇到单独写在表达式位置的int关键字就会抛出语法错误。 - 这段代码里
beg、end本身都定义为int类型,二者相加、除以整数2的运算结果本身就是int类型,这里的强制转换属于完全多余的写法。
修复方案
- 保留强制转换逻辑的话,改成C语言标准的强制转换语法即可:
mid = (int)((beg + end) / 2);
- 直接删除多余的强制转换,代码更简洁且运行逻辑完全一致:
mid = (beg + end) / 2;
二分查找实用编码提示:计算中间下标更推荐使用
mid = beg + (end - beg) / 2的写法,可以避免当beg和end取值都较大时,beg + end超出int类型取值上限触发整数溢出,导致下标计算错误的问题。
内容的提问来源于stack exchange,提问作者P4Penguin
相关产品推荐
相关产品推荐

