我在C方面有很多经验,但在C ++方面几乎没有经验。我的印象是几乎所有C代码都将在c ++下编译。这是我的问题。我有这行代码
void * address = (void *)(dest_addr + data_base_mapped);
其中dest_addr
和data_base_mapped
的类型为char *
。
我得到类型'char *'和'char *'的无效操作数到二元运算符+。
我尝试将两个char*
投放到int
:
void * address = (void *)((int)dest_addr + (int)data_base_mapped);
然后我得到错误“从'char *'转换为'int'会失去精确度。
如何将这两个指针添加到一起以给我一个新地址?
答案 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 + number
或pointer - number
偏移指针,但pointer + pointer
只指向内存中的随机位置。