添加指向字符

时间:2015-05-26 14:49:00

标签: c pointers mingw addition

我怀疑是否出于可移植性的原因添加指针正在对实现进行基本假设,但有人可以解释为什么在MinGW GCC下我无法执行以下操作,因为以下错误

  

“二进制+的操作数无效(有char *char *)”

char *cbase;
char *ep;
char *tbase;
tbase = ep + tbase;

然而,如果我略微操纵代码,我就可以逃脱

char *cbase;
char *ep;
int temp;

temp = cbase;
tbase = ep + temp;

我知道我正在对指针实现做一些假设,但我的观点是为什么编译器不能为我解决它?

2 个答案:

答案 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的长度,因此您可以计算指针差异。