问一道关于指针的笔试问题,高手请进,麻烦了,谢谢!

我遍了一个简单的程序,验证下,发现错误不在除以2那块#include"stdio.h"intmain(){int*p,*q,*m;inta[5],i=9;q=&a[0];... 我遍了一个简单的程序,验证下,发现错误不在除以2那块
#include "stdio.h"
int main()
{
int *p,*q,*m;
int a[5],i=9;
q=&a[0];
m=&a[4];
p=&i;
p=(q+m)/2;
}
错误提示: error: invalid operands of types `int*' and `int*' to binary `operator+'
我把除号去掉,就是p=q+m,也报错
high,low,middle是具有相同类型的指针变量,并且low和high指向数组元素,下面的语句是否合法,若不合法,请问如何修改?
middle=(low+high)/2

这个错在哪里?是除号的问题吗?哪位知道麻烦回答下,谢谢
展开
 我来答
yanhaodeng
2011-11-01
知道答主
回答量:19
采纳率:0%
帮助的人:9.4万
展开全部
将p=(q+m)/2;改成*p=(*q+*m)/2;试试
middle=(low+high)/2也改成*middle=(*low+*high)/2;
比如int a[10];int b[10];int *low = a;int *high=b;low和high指向数组首地址;
low和high指向数组第n个元素:low = &a[n];high = &b[n];
low和high是指针指向地址,不是数,所以不能进行数值运算;
追问
谢谢你的回答,我这个程序纯粹是为了验证这个问题编的,呵呵。
当指针指向数组的时候是可以进行运算的啊,而且我把等式改成middle=low+(high-low)/2就可以了,是不是指针与指针不能相加?指针指向数组的时候可以运算的意思是不是指针地址+偏移量?
追答
指针之间只能相减或进行比较,不能相加;
指针指向数组的时候可以运算的意思是指针地址+偏移量的意思。

“当指针指向数组的时候是可以进行运算的啊,而且我把等式改成middle=low+(high-low)/2就可以了”,你进行的只是地址的运算:比如:
int* p1;int *p2;
int a[10]={0,10,2,3,4,5,6,7,8,9};
p1=&a[0]+1;
p2=&a[7];
s = (*p2-*p1); //s = -3;是数组里面的值相减
s = (p2-p1); //s = 6;是数组地址的值相减
flame012
2011-10-31
知道答主
回答量:7
采纳率:0%
帮助的人:12.2万
展开全部
*p=(*q+*m)/2,错误提示意思是不合法的运算对象(整形指针和整形指针的二进制相与)
你的加法是2个整形数相加而不是指针地址相加,没调试器,不保证代码正确
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jaybestwang
2011-10-31 · TA获得超过4106个赞
知道小有建树答主
回答量:940
采纳率:0%
帮助的人:704万
展开全部
是+号的问题啊,+号两边怎么能是指针类型呢?除非你重载+运算符才能这么用
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zeromhf
2011-11-06
知道答主
回答量:16
采纳率:0%
帮助的人:9.7万
展开全部
错误报告的意思是说编译器没有重载两个指针的加法运算,就像两个类对象如果没有重载加法运算也会出现这种错误
如果想取中间地址那么可以 p = (int*)(long(q)+long(m))/2
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式