GCC错误:二进制+的操作数无效

时间:2011-12-20 17:29:37

标签: c pointers gcc binary

为什么GCC会给我这个错误?我在这里做错了什么?

 temp.c: In function main:
 temp.c:6: error: invalid operands to binary +

代码:

 main()
 {
     char *Address1,*Address2,*NewAddress;
     Address1= (char*)0x12;
     Address2= (char*)0x34;
     NewAddress = Address1+Address2;
 }

6 个答案:

答案 0 :(得分:5)

你为什么要这样做?

C语言禁止添加两个指针。它仅定义(严格限制)添加指针和整数。

基本上,你只能向指针添加一个足够小的整数,以便结果在某个已分配的内存区域的内部或结束边界。

答案 1 :(得分:4)

C不允许添加两个指针。我发现的最好的解释是Rouben Rostamian的引用:

  

如果你和我住在同一条街上,我们家的差别   数字是我们房屋之间距离的某种表示。

     

现在,你告诉我,我们家的总和有什么意义   号码?

所以整个操作没有任何意义。这很合乎逻辑,不是吗?但是你可以这样做:

NewAddress = (char *)(0x12 + 0x34);

答案 2 :(得分:0)

你不能将指针添加到一起,这将是荒谬的。

允许的是为指针添加整数值:

char *Address1,*NewAddress;
unsigned Offest;
     Address1= (char*)0x12;
     Offset= 0x34;
     NewAddress = Address1+Offset

答案 3 :(得分:0)

因为这些变量是指针,请尝试转换为int

NewAddress = (char *)((int)Address1 + (int)Address2);

答案 4 :(得分:0)

在C中,你不能添加两个指针。如果你考虑一下,尝试逻辑上没有任何意义。要解决此问题,您可以在添加之前将其中一个指针强制转换为整数值:

NewAddress = (long)Address1 + Address2;

答案 5 :(得分:-4)

这些答案太可怕了。我接受最新的C标准可能会弃用该功能,但是有充分的理由添加和减去指针,例如当一个人是相对的或您想要创建一个相对地址时。 C一直被认为是高级汇编程序,相对寻址是所有现代CPU中的基本OP。

对于所提出的解决方案:非常糟糕的做法是将每个指针都转换为整数然后相减,因为指针可能不适合整数。但是(INT)(p2-p1)应该是安全的,假设P1和P2地址在同一上下文中,即已知在同一缓冲区中。