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

为什么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; } 

你为什么要那样做?

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

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

C不允许添加两个指针。 我发现的最好的解释,没有触及任何标准,是Rouben Rostamian的引用:

如果你和我住在同一条街上,我们房屋数量的差异就是我们房屋之间距离的某种表现。

现在,你告诉我,我们的房屋数量总和有什么意义?

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

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

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

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

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

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

 NewAddress = (long)Address1 + Address2; 

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

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