添加指向字符的指针

Adding pointers to chars

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

"invalid operands to binary + (have char * and char *)"

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

然而,如果我稍微修改一下代码,我就可以逃脱

char *cbase;
char *ep;
int temp;

temp = cbase;
tbase = ep + temp;

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

TL;DR - 你不能添加两个指针。

指针是内存地址。试想一下,即使你本来允许添加两个指针,结果有什么意义?它会产生 mostly 一个 invalid 值,不是吗?

OTOH,您可以向指针添加 int。这就像通过移动那么多元素来生成一个地址。

此外,根据 C11 标准,第 6.5.6 章,加法运算符强调我的

For addition, either both operands shall have arithmetic type, or one operand shall be a pointer to a complete object type and the other shall have integer type. (Incrementing is equivalent to adding 1.)

添加两个指针很可能会生成无效指针,因此这是不允许的,但是向指针添加一个整数是完全有效的,它会增加指针,即生成的指针很可能是有效的,除非你添加一个值,使其指向最初指向的内存块之外。

你不能添加指针,但你可以计算指针差异,例如它们就像距离

char *source = "Some text for a test";
char *head = strstr(source, "text");
char *tail = strstr(source, "for");
size_t length = tail - head - 1;

会给你text的长度,这样你就可以计算出指针的差异了。