我想重构我的一些旧 C 代码,我很好奇是否可以ptr++
用ptr += 1
where ptr
is some 指针替换 all 而不改变任何行为。这是我的意思的一个例子,来自 K&R 第 5.3 节:
/* strlen: return length of string s*/
int strlen(char *s)
{
int n;
for (n = 0; *s != '\0'; s++)
n++;
return n;
}
当我用 替换s++
时s += 1
,我得到了相同的结果,但我想知道这是否适用于所有类型。我还对 s 做了一个测试int
:
int size = 10;
int *int_array = (int*)calloc(size, sizeof(int));
for (int i = 0; i < size; i++)
int_array[i] = i;
for (int i = 0; i < size; i++) {
printf("*int_array = %d\n", i, *int_array);
int_array++;
}
如果我用 替换该行int_array++;
,int_array += 1;
我会得到相同的结果。
在考虑了更多之后,我意识到如果在表达式中使用该值可能会出现问题。我只是将增量移动到另一行,这样会更安全吗:
int a = 5;
int b = a++;
会成为:
int a = 5;
int b = a;
a += 1;
结论
我认为可能是一个问题,增加不同类型的指针,这不是问题。请参阅@bdonlan 的回复了解原因。
这并不意味着您可以将所有替换x++
为x += 1
并期望相同的行为。但是,您可以安全地替换++x
为(x += 1)
,因为它们是等效的。