c ++中的指针算术

时间:2014-07-14 21:36:02

标签: c++ c

我在C方面有很多经验,但在C ++方面几乎没有经验。我的印象是几乎所有C代码都将在c ++下编译。这是我的问题。我有这行代码

void * address =  (void *)(dest_addr + data_base_mapped);

其中dest_addrdata_base_mapped的类型为char *

我得到类型'char *'和'char *'的无效操作数到二元运算符+。

我尝试将两个char*投放到int

void * address =  (void *)((int)dest_addr + (int)data_base_mapped);

然后我得到错误“从'char *'转换为'int'会失去精确度。

如何将这两个指针添加到一起以给我一个新地址?

2 个答案:

答案 0 :(得分:5)

你正在接近这个错误。你永远不会在一起添加两个指针。

但是,你可以拥有一个" base"指针和索引/偏移值。即:

int iOffset = 0;
char* base;
void* address = (void*)(base + iOffset);

这是一个很好的例子,可以作为复习者。 http://phoenix.goucher.edu/~kelliher/f2011/cs220/baseOffsetLab.html

答案 1 :(得分:2)

  

哪个会生成这个有效的c代码,但后来我收到错误"来自' char *'到' int'失去精确度。

您收到该错误的原因是指针可能比int宽。例如,在amd64平台上,int为32位,char*为64位。

至于为什么原版甚至在C中编译我不知道,因为+运算符在给定两个指针的情况下在逻辑上是正确的。您可以使用pointer - pointer获取偏移量,或使用pointer + numberpointer - number偏移指针,但pointer + pointer只指向内存中的随机位置。