为什么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;
}
答案 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地址在同一上下文中,即已知在同一缓冲区中。