我怀疑是否出于可移植性的原因添加指针正在对实现进行基本假设,但有人可以解释为什么在MinGW GCC下我无法执行以下操作,因为以下错误
“二进制
+
的操作数无效(有char *
和char *
)”
char *cbase;
char *ep;
char *tbase;
tbase = ep + tbase;
然而,如果我略微操纵代码,我就可以逃脱
char *cbase;
char *ep;
int temp;
temp = cbase;
tbase = ep + temp;
我知道我正在对指针实现做一些假设,但我的观点是为什么编译器不能为我解决它?
答案 0 :(得分:3)
TL; DR - 您无法添加两个指针。
指针是(是)内存地址。想一想,即使你允许添加两个指针,结果有什么意义?它会产生 无效的值,不是吗?
OTOH,您可以向指针添加int
。这就像通过移动生成一个地址那么多元素。
此外,从C11
标准,章节§6.5.6,添加运算符(强调我的)
另外,两个操作数都应具有算术类型,或者一个操作数应为指向完整对象类型的指针,另一个操作数应具有整数类型。 (递增是 相当于添加1。)
答案 1 :(得分:0)
添加两个指针很可能会生成无效指针,因此不允许这样做,但是向指针添加一个整数是完全有效的,它会增加指针,即结果指针很可能是有效的,除非你添加一个使其指向它最初指向的内存块之外的值。
你不能添加指针,但你可以计算指针差异,它们就像距离,例如
char *source = "Some text for a test";
char *head = strstr(source, "text");
char *tail = strstr(source, "for");
size_t length = tail - head - 1;
将为您提供text
的长度,因此您可以计算指针差异。