黑马程序员技术交流社区

标题: 关于指针基本运算的问题,解释一下 [打印本页]

作者: a_skting    时间: 2016-4-24 21:23
标题: 关于指针基本运算的问题,解释一下
假设high, low, middle都是具有相同类型的指针,并且low 和 high指向数组元素。下面的语句为什么不合法,应该如何修改:::
middle = (low + high) / 2;

修改后:middle = low + (high - low)/ 2;
疑问:为什么low + high 不可以,high - low 就可以了。
作者: a_skting    时间: 2016-4-24 21:27
上面是部分语句。
全部语句可以自己写一个
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;
}
作者: king、小白    时间: 2016-4-25 00:16
指针地址之间应该不能相加减吧,没有任何意义。
作者: a_skting    时间: 2016-4-25 00:31
king、小白 发表于 2016-4-25 00:16
指针地址之间应该不能相加减吧,没有任何意义。

.地址相减是这两个元素的距离。有意义。
作者: king、小白    时间: 2016-4-25 11:44
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);
这就是你想要求的数组中间的地址,输出看看就知道了。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2