A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

假设high, low, middle都是具有相同类型的指针,并且low 和 high指向数组元素。下面的语句为什么不合法,应该如何修改:::
middle = (low + high) / 2;

修改后:middle = low + (high - low)/ 2;
疑问:为什么low + high 不可以,high - low 就可以了。

4 个回复

倒序浏览
上面是部分语句。
全部语句可以自己写一个
int main()
{
int *low, *high, *middle;
int arr[] = {0,1,2,3,4,5,6};
low = arr;
high = arr + 6;
middle = (low + high) / 2;

printf("%p,%p,%p\n", low, high, middle);

return 0;
}
回复 使用道具 举报
指针地址之间应该不能相加减吧,没有任何意义。
回复 使用道具 举报
a_skting 来自手机 中级黑马 2016-4-25 00:31:53
板凳
king、小白 发表于 2016-4-25 00:16
指针地址之间应该不能相加减吧,没有任何意义。

.地址相减是这两个元素的距离。有意义。
回复 使用道具 举报
a_skting 发表于 2016-4-25 00:31
.地址相减是这两个元素的距离。有意义。

你说的意思我明白,但是一般都是指针地址加减上一个整数表示指针的地址加减整数*变量大小的字节,你上面的(low + high)/ 2程序就不通过,指针地址如0x00010004直接加上指针地址0x0001000c我也不懂,反正我是没见过,我也是初学者,你要是懂了给我讲讲,相互帮助哈
int len = sizeof(arr)/sizeof(arr[0]);
middle = arr + len / 2;
printf("%p\n",&arr[3]);
printf("%p\n",middle);
printf("%p--%p--%p",low,middle,high);
这就是你想要求的数组中间的地址,输出看看就知道了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马